Python进阶知识之pandas库

目录

一、Series:一维带标签的数组

二、DataFrame:二维表格型数据结构

三、Series 的核心操作

四、 DataFrame 的核心操作

五、 索引的特殊用法

六、 loc 与 iloc:DataFrame 的高级查询

七、综合案例

一、Series:一维带标签的数组

Series 是 pandas 中最基础的一维数据结构,由数据值索引(index) 组成,可理解为 “带标签的列表”。

  • 核心特点
    • 可通过索引或位置快速访问、修改数据。
    • 数据值可以是数值、字符串等多种类型;
    • 索引可以是自定义标签(如字符串)或默认整数(从 0 开始);
    • 代码示例
import pandas as pd# 1. 基于列表创建,默认整数索引
s_1 = pd.Series([1, 2, 3, 4, 5])
print(s_1)

# 输出:
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# dtype: int64

# 2. 自定义索引(字符串标签)
s_2 = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s_2['d'])  # 通过标签访问,输出:4
print(s_2[4])    # 通过位置访问,输出:5
# 3. 基于字典创建(键为索引,值为数据)
dic_1 = {"name1": "Peter", "name2": "tim", "name3": "rose"}
s_4 = pd.Series(dic_1)
print(s_4)

 # 输出:
# name1    Peter
# name2      tim
# name3     rose
# dtype: object

# 4. 常用操作:修改值、删除元素
s_2[0] = 100  # 修改第一个元素值
s_2 = s_2.drop('a')  # 删除索引为'a'的元素

二、DataFrame:二维表格型数据结构

DataFrame 是 pandas 中最常用的二维数据结构,类似 Excel 表格或数据库表,由行索引列名数据值组成,可视为 “多个 Series 的拼接”(每一列是一个 Series)。

核心特点

  1. 行和列都有标签(行索引 index,列名 columns);
  2. 支持灵活的增删改查、排序、筛选等操作;
  3. 可通过字典、数组等多种方式创建。

代码示例

import pandas as pd# 1. 基于字典创建(键为列名,值为列数据)
dic = {'name': ['kiti', 'beta', 'peter', 'tom'],'age': [20, 18, 35, 21],'gender': ['f', 'f', 'm', 'm']}
df = pd.DataFrame(dic)
print(df)

# 输出:
#     name  age gender
# 0   kiti   20      f
# 1   beta   18      f
# 2  peter   35      m
# 3    tom   21      m

# 2. 自定义行索引
df_1 = pd.DataFrame({'age': [10, 11, 12],'name': ['tim', 'tom', 'rose']},index=['person1', 'person2', 'person3'])  # 行索引为自定义标签
print(df_1.index)   # 查看行索引:Index(['person1', 'person2', 'person3'], dtype='object')
print(df_1.columns) # 查看列名:Index(['age', 'name'], dtype='object')

三、Series 的核心操作

Series 的操作围绕 “访问、修改、删除” 展开,依赖索引或位置实现。

访问数据

s_2 = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])# 标签访问(单个/多个)
print(s_2['d'])        # 单个元素:4
print(s_2['a':'d'])    # 切片(包含终点):a=1, b=2, c=3, d=4
print(s_2[['a', 'd']]) # 多个标签:a=1, d=4# 位置访问(类似列表)
s_3 = pd.Series(['lily', 'rose', 'jack'])
print(s_3[2])          # 单个位置:jack
print(s_3[0:2])        # 切片(不包含终点):lily, rose

修改与删除

s_3[0] = 'Peter'  # 修改指定位置的值
s_1 = s_1.drop('a')  # 删除标签为'a'的元素(返回新Series,原数据不变)

四、 DataFrame 的核心操作

DataFrame 支持行列增删、数据访问、排序、值替换等操作,灵活性极高。

数据访问

# 访问列(列名作为属性或键)
print(df.name)          # 等价于df['name'],输出name列数据
print(df[['age', 'name']])  # 访问多列# 访问行(标签或位置)
print(df.loc['person1'])  # 通过行标签访问
print(df.iloc[0:2])       # 通过位置切片访问前2行# 访问单个值
print(df.loc['person1', 'name'])  # 行标签+列名:tim

增删行列

# 增加列
df['pay'] = [20, 30, 40, 50]  # 新增'pay'列# 增加行
df.loc['person4'] = [20, 'kitty', 'f', 60]  # 新增行(指定行标签和数据)# 删除列
del df['age']  # 直接删除'age'列
df.drop('name', axis=1, inplace=True)  # 通过drop删除列(axis=1表示列)# 删除行
df.drop('person3', axis=0, inplace=True)  # axis=0表示行

排序与值替换

# 按列排序
df.sort_values(by=['age'])  # 按'age'升序排序
df.sort_values(by=['age'], ascending=False)  # 降序排序(ascending=False)# 值替换
df['gender'] = df['gender'].replace(['m', 'f'], ['male', 'female'])  # 将'm'替换为'male','f'替换为'female'

五、 索引的特殊用法

pandas 的索引(index)是数据访问的核心,支持多种类型(如整数、字符串、日期),且可灵活重置。

日期索引

import numpy as np
# 生成日期索引(2018-01-01到2018-01-05)
datas = pd.date_range('20180101', periods=5)
df1 = pd.DataFrame(np.arange(30).reshape(5,6), index=datas, columns=['A','B','C','D','E','F'])
print(df1.index)  # 输出日期索引:DatetimeIndex(['2018-01-01', ..., '2018-01-05'], dtype='datetime64[ns]')

重置索引

s_4 = pd.Series({"name1": "Peter", "name2": "tim", "name3": "rose"})
s_4.index = range(0, len(s_4))  # 将索引重置为0,1,2

六、 loc 与 iloc:DataFrame 的高级查询

两种方法用于精确定位数据,区别在于索引方式:

  1. loc:基于标签索引(行标签 + 列名);
  2. iloc:基于位置索引(行号 + 列号,从 0 开始)。

代码示例

# 基于日期索引的DataFrame
df = pd.DataFrame(np.arange(30).reshape(5,6), index=pd.date_range('20180101', periods=5),columns=['A','B','C','D','E','F'])# loc用法(标签索引)
print(df.loc['20180103', 'B'])  # 2018-01-03行,B列的值:13
print(df.loc['20180103':, ['B', 'D']])  # 2018-01-03及之后的行,B和D列# iloc用法(位置索引)
print(df.iloc[1, 2])  # 第2行(index=1),第3列(columns=2)的值:8
print(df.iloc[[1,2,4], :])  # 第2、3、5行的所有列

七、综合案例

import pandas as pd
import numpy as np# 1. Series常用操作
# 创建Series(带自定义索引)
sales = pd.Series([150, 200, 180, 220], index=['一月', '二月', '三月', '四月'])
print("1. 月度销售额数据:")
print(sales)# 基本访问
print("\n二月销售额:", sales['二月'])  # 标签访问
print("第一季度销售额:\n", sales[0:3])  # 位置切片# 基本计算
print("\n平均月销售额:", sales.mean())
print("总销售额:", sales.sum())# 修改数据
sales['三月'] = 190
print("\n修改后三月销售额:\n", sales)# 2. DataFrame创建与基础访问
# 从字典创建DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六'],'部门': ['技术', '市场', '技术', '行政'],'工资': [8000, 7500, 9000, 6800],'入职年份': [2020, 2021, 2019, 2022]
}
df = pd.DataFrame(data, index=['EMP001', 'EMP002', 'EMP003', 'EMP004'])
print("\n2. 员工信息表:")
print(df)# 查看基本信息
print("\n数据形状(行,列):", df.shape)
print("列名:", df.columns.tolist())# 列访问
print("\n所有员工工资:\n", df['工资'])
print("技术部员工:\n", df[df['部门'] == '技术'])# 行访问
print("\nEMP002员工信息:\n", df.loc['EMP002'])  # 标签访问
print("前2名员工信息:\n", df.iloc[:2])  # 位置访问# 3. DataFrame数据处理
# 新增列
df['年薪'] = df['工资'] * 12
print("\n3. 添加年薪列后:")
print(df)# 修改数据
df.loc['EMP002', '工资'] = 7800  # 修改特定值
print("\n修改李四工资后:\n", df)# 排序
df_sorted = df.sort_values(by='工资', ascending=False)  # 降序排序
print("\n按工资排序后:\n", df_sorted)# 简单筛选
high_salary = df[df['工资'] > 7500]
print("\n工资超过7500的员工:\n", high_salary)# 分组统计
dept_avg = df.groupby('部门')['工资'].mean()
print("\n各部门平均工资:\n", dept_avg)# 4. 数据读取与保存(模拟)
# 实际使用时替换为真实文件路径
# df.to_csv('employee_data.csv', index=False)  # 保存为CSV
# new_df = pd.read_csv('employee_data.csv')   # 读取CSV
print("\n4. 数据读取提示:取消注释可实现CSV文件的保存和读取")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915951.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GIT】基础知识及基本应用

很高兴为您详细介绍Git的相关知识。Git是一个分布式版本控制系统,常用于软件开发中的代码管理和协作。以下是关于Git的一些基础知识:1. 安装和配置安装:Windows:可以从GitHub下载适用于Windows的安装包。MacOS:可以通过…

Maven Scope标签:解锁Java项目依赖管理的秘密武器

一、Maven 与依赖管理简介在 Java 项目开发的庞大体系中,Maven 堪称基石般的存在,发挥着极为关键的作用。它遵循 “约定优于配置” 的理念,让项目的构建过程变得规范有序、结构化且具备良好的重复性 。比如,它强制执行标准的项目结…

IP43半加固笔记本L156H

IP43半加固笔记本L156H 产品特性:● 标配Intel I7-7700HQ 4核8线程处理器 ● 操作系统支持Windows7/10 64bit / Li n u x ● DDR4 16G 高速内存 zui高支持64G ● 全高清显示面板15.6寸,1920X1080 ● 内置海德射频模块SMA接口 ● 工作温度:…

ZooKeeper 是什么?

ZooKeeper 是一个分布式协调服务,由 Apache 基金会开发,专为分布式系统设计。它提供了高可用、高性能、一致性的核心服务,帮助分布式应用解决诸如配置管理、命名服务、分布式锁、集群协调等问题。ZooKeeper 的核心特点:简单易用&a…

Java学习第六十三部分——K8s

目录 📫 一、关键概述 🔍 ​​二、定义起源​​ 🚀 ​​三、核心特点​​ 🏗️ ​​四、核心组件​​ 🧩 ​​五、资源对象​​ ⚡ ​​六、应用场景​​ 🧱 ​​七、Java与K8s 🛠️ ​…

【自用】JavaSE--阶段测试

考试题目第一题(10分)需求目前有100名囚犯,每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号(要求这些囚犯的编号是不能重复的),然后让他们依次站成一排。(注:位置是从…

Vulnhub Matrix-Breakout-2-Morpheus靶机攻略

1.下载靶机 靶机下载地址:https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 下载后使用VM打开,后续选择安装地址开启就算是下载好了 2.主机发现 查看网络适配器模式(NET模式),找到NET…

OpenCV —— 绘制图形

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️…

RHCE(4)

主:从:

网络安全作业三

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户登录</title><link rel"style…

深入理解 ThreadLocal:从原理到最佳实践

&#x1f4dd; 前言&#xff1a;为什么你需要了解 ThreadLocal&#xff1f;在多线程并发编程中&#xff0c;线程安全始终是一个绕不开的话题。我们常常需要为每个线程维护一份独立的上下文数据&#xff0c;例如用户信息、事务 ID、日志追踪 ID 等。这些数据不能被多个线程共享&…

AD一张原理图分成多张原理图

先选中你要作为主级原理图的那张原理图&#xff0c;我这里是Sheet1,点击设计&#xff08;D&#xff09;&#xff0c;再点击create sheet symbol from sheet&#xff08;这个不能选错&#xff09;快捷键&#xff1a;DY弹窗中选择要加入的次级原理图左击鼠标放置重复上面的动作&a…

AI大模型资源

网址 https://sass.kupepoem.cn/ 登录-选择模型 打开上述网址后如下操作&#xff1a; 进入后&#xff0c;所有模型均可使用&#xff1a; o4-mini&#xff08;支持Deep Research深入研究&#xff09; 选择o4-mini模型 选择深度研究 要研究什么&#xff0c;对话直接输入即可。…

论文阅读--《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》

好的&#xff0c;这是《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》论文的中文翻译&#xff1a;[文件名称]: Besting_the_Black-Box_Barrier_Zones_for_Adversarial_Example_Defense.pdf [文件内容开始]第 1 页 收稿日期&#xff1a;2021年10月1…

如何保证GPFS文件系统的强一致性

一、底层机制&#xff1a;分布式锁与元数据管理GPFS 通过分布式锁和集中式元数据管理的结合&#xff0c;确保数据和元数据的一致性&#xff1a;集中式元数据服务器&#xff08;MDS&#xff09;GPFS 采用主从架构的元数据管理&#xff0c;由指定节点&#xff08;或集群&#xff…

使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)

1.项目背景&#xff1a; 本项目作为小商场系统&#xff0c;涵盖内容如下&#xff1a; litemall Spring Boot后端 Vue管理员前端 微信小程序用户前端 Vue用户移动端 1.1项目架构&#xff1a; 1.2项目技术栈&#xff1a; 本项目可以使用window运行jar包本地部署&#xff0c…

Java网络编程入门:从基础原理到实践(二)

目录 1. 网络编程基础&#xff1a;搞懂设备通信的底层逻辑 1.1 为啥需要网络编程&#xff1f;—— 让设备 “互通有无” 1.2 什么是网络编程&#xff1f;—— 给数据 “定规矩、找路线” 1.3 网络编程的基本概念&#xff1a;理清通信里的角色和流程 1.3.1 发送端和接收端 …

XSS内容分享

反射型XSS &#xff1a;反射型XSS 是非持久性、参数型的跨站脚本。反射型XSS 的JS 代码在Web 应用的参数&#xff08;变量&#xff09;中&#xff0c;如搜索框的反射型XSS。在搜索框中&#xff0c;提交PoC[scriptalert(/xss/)/script]&#xff0c;点击搜索&#xff0c;即可触发…

电线杆距离居民区的安全距离【重要!!!】

10kV架空电线安全距离购房指南 中国大陆地区10kV架空电线距居民住宅需要满足1.5米水平安全距离&#xff08;裸导线&#xff09;和6.5米垂直安全距离的国家强制标准。根据现行法规&#xff0c;10kV系统的电磁辐射水平极低&#xff0c;对居民健康影响可忽略不计&#xff0c;但购房…

河南萌新联赛2025第(二)场:河南农业大学

我看到花儿在绽放 我听到鸟儿在歌唱 我看到人们匆匆忙忙 我看到云朵在天上 我听到小河在流淌 我看到人们漫步在路上 河南萌新联赛2025第&#xff08;二&#xff09;场&#xff1a;河南农业大学 河南萌新联赛2025第&#xff08;二&#xff09;场&#xff1a;河南农业大学_ACM/N…