Pandas 数据读取与清洗
本章导言
Pandas是Python编程语言中一个功能强大、非常流行的开源数据分析和处理库。它名字源于“Panel Data”(面板数据),为处理结构化数据(如表格、时间序列等)提供了高效且便捷的工具。
您可以把它想象成Python中的“超级Excel”。它核心的数据结构是两种:Series(一维数据,类似于Excel中的一列)和DataFrame(二维表格,类似于整个Excel工作表)。通过Pandas,您可以轻松地从各种文件(如CSV、Excel、数据库)中读取数据,然后进行一系列操作,包括:
- 数据清洗:处理缺失值、删除重复行。
- 数据转换:对数据进行筛选、排序、合并、变形和分组。
- 数据分析:执行统计汇总、计算均值、中位数等。
- 数据可视化:可以轻松地集成Matplotlib等库进行简单的图表绘制。
简而言之,Pandas是数据科学家、分析师和任何需要处理数据的人的必备工具,它让在Python中操作和分析数据变得直观而高效。
6.0 相关库安装与环境配置
安装 pandas
pandas 可以通过 pip 命令轻松安装:
|
|
为加速下载,推荐使用国内镜像:
|
|
安装 openpyxl
为了支持 Excel 文件读写,还需要安装 openpyxl:
|
|
国内镜像下载:
|
|
6.1 pandas 两种基本数据结构
6.1.1 Series(一维数据)
Series 就像是一个带标签的列表,可以存储任何数据类型。
|
|
运行结果:
|
|
关键说明:
- Series:pandas 中的一维数据结构,类似于带标签的数组
- 默认索引:如果不指定索引,会自动生成 0 开始的整数索引
- 自定义索引:可以通过
index参数指定有意义的标签作为索引
6.1.2 DataFrame(二维数据)
DataFrame 就像 Excel 表格,有行和列的结构。
|
|
运行结果:
|
|
关键说明:
- DataFrame:pandas 中的二维表格数据结构,类似于 Excel 工作表或 SQL 表
- 字典创建:通过 Python 字典创建 DataFrame,键成为列名,值成为列数据
- 自动索引:DataFrame 会自动为每行生成行索引(0, 1, 2, 3…)
- 数据形状:使用
shape属性获取表格的维度信息(行数, 列数) - 列式存储:数据按列组织,每列可以是不同的数据类型但同一列类型一致
任务: 创建两个 Series 和一个 DataFrame
要求:
- 创建一个包含5个商品价格的 Series,索引为商品名称
- 创建一个包含学生身高的 Series,索引为学号(S001, S002, S003)
- 创建一个包含图书信息的 DataFrame,包含书名、作者、价格、出版年份四列,至少4本书
示例输出:
|
|
6.2 数据读写操作
6.2.1 写入 CSV 和 Excel 文件
示例1:写入二维列表
二维列表的第 0 个元素为表头行,其他为数据行。
|
|
示例2:写入python字典
字典的所有键为表头,字典的值为每列数据。
|
|
6.2.2 从 CSV 和 Excel 读取数据
|
|
任务: 完成数据的写入和读取操作
要求:
-
创建一个包含学生成绩的 DataFrame(学号、姓名、语文、数学、英语)。成绩数据如下:
学号 姓名 语文 数学 英语
S001 张三 85 90 88
S002 李四 92 87 85
S003 王五 78 95 92
S004 赵六 88 82 79
-
将数据保存为 CSV 文件(使用 utf-8-sig 编码),文件名为:
student_score.csv。 -
将数据保存为 Excel 文件,文件名为:
student_score.xlsx。 -
分别从前面生成的 CSV 和 Excel 文件读取数据,并打印前 5 行数据。
6.3 数据查看操作
下面的代码创建了一个包含员工信息的 DataFrame,并演示了 pandas 中常用的数据查看方法,包括查看数据形状、前后几行数据、列名、数据类型、基本信息和数值统计信息,为后续的数据分析提供了基础的数据概览。
|
|
6.3.1 查看完整数据
|
|
知识点说明:
- 直接打印DataFrame会以表格形式显示数据
- 自动处理列对齐和格式美化
- 如果数据量很大,默认只显示前后几行
6.3.2 查看数据形状
|
|
知识点说明:
shape属性返回一个元组 (行数, 列数)- 类似于NumPy数组的shape概念
- 快速了解数据规模的重要属性
6.3.3 查看前几行数据
|
|
知识点说明:
head(n)方法显示前n行数据- 默认参数n=5,即不传参数时显示前5行
- 常用于快速浏览数据开头部分
6.3.4 查看后几行数据
|
|
知识点说明:
tail(n)方法显示后n行数据- 默认参数n=5
- 用于检查数据末尾的内容
6.3.5 查看列名
|
|
知识点说明:
columns属性返回所有列名的Index对象- 可以转换为列表方便查看和使用
- 列名是数据框的重要标识
6.3.6 查看数据类型
|
|
知识点说明:
dtypes属性显示每列的数据类型- Pandas会自动推断数据类型:
- 字符串 → object
- 整数 → int64
- 浮点数 → float64
- 了解数据类型对后续数据处理很重要
6.3.7 查看基本信息
|
|
知识点说明:
info()方法提供数据的综合信息:- 数据类型
- 非空值数量
- 内存使用情况
- 数据形状
- 是数据探索性分析的重要工具
6.3.8 查看数值统计信息
|
|
知识点说明:
describe()方法对数值列生成描述性统计:- 计数(count)
- 均值(mean)
- 标准差(std)
- 最小值(min)
- 四分位数(25%, 50%, 75%)
- 最大值(max)
- 只对数值型列有效,自动忽略非数值列
- 快速了解数据分布情况
任务: 对提供的数据集进行全面的查看和分析
数据:
|
|
要求:
- 创建 DataFrame 并查看基本形状和列名
- 使用 head() 和 tail() 查看数据
- 查看数据类型信息
- 使用 describe() 查看数值列的统计信息
- 回答以下问题:
- 数据有多少行多少列?
- 哪些列是数值型数据?
- 单价的最大值和最小值是多少?
- 平均库存数量是多少?
6.4 使用 loc 和 iloc 索引
6.4.1 loc - 按标签索引
|
|
6.4.2 iloc - 按位置索引
|
|
任务: 使用 loc 和 iloc 对数据进行精确索引
数据: 使用之前创建的产品数据 DataFrame
要求:
-
使用 loc 选择:
- 前3个产品的产品名称和单价
- 所有电子类产品的完整信息
- 产品ID为P002和P004的产品名称和库存
-
使用 iloc 选择:
- 第2到第4行,第1到第3列
- 第1行和第5行的所有列
- 所有行的第0列和第4列
-
比较 loc 和 iloc 的区别:
- 使用 loc[0:2] 和 iloc[0:2] 选择数据,观察差异
- 解释为什么结果不同
思考: 什么情况下应该使用 loc,什么情况下使用 iloc?
6.5 行筛选和列筛选
6.5.1 列筛选
|
|
6.5.2 行筛选
|
|
任务: 对销售数据进行多条件筛选
数据:
|
|
要求:
- 列筛选:选择销售员、产品、销售额三列
- 单条件筛选:销售额大于2000的销售记录
- 多条件筛选:1月份且销售额达标的记录
- 使用 isin 筛选:产品为手机或平板的销售记录
- 使用 query 方法:筛选2月份且销售额大于1000的记录
扩展: 尝试使用 ~ 符号进行反向筛选(如筛选未达标的记录)
6.6 新建列
|
|
任务: 为电商数据创建多个衍生列
数据: 使用之前的产品数据,添加销量列:
|
|
要求:
- 计算每个产品的总销售额(单价 × 销量)
- 根据单价创建价格等级列:
- 高价:单价 > 3000
- 中价:1000 <= 单价 <= 3000
- 低价:单价 < 1000
- 根据销量创建畅销等级列:
- 热销:销量 > 200
- 一般:100 <= 销量 <= 200
- 滞销:销量 < 100
- 计算库存周转率(销量 / 库存数量)
- 添加一列标识是否为电子类产品
输出: 显示包含所有新列的 DataFrame,并解释每个新列的业务意义
6.7 基本统计分析
|
|
任务: 对销售数据进行全面的统计分析
数据: 使用包含销售记录的 DataFrame
要求:
- 基本统计:计算销售额的描述性统计(均值、最大、最小、标准差等)
- 按销售员分组统计:
- 每个销售员的销售总额
- 每个销售员的平均销售额
- 每个销售员的销售次数
- 按产品分组统计:
- 每个产品的总销售额
- 每个产品的平均销售额
- 最畅销的产品(按销售额)
- 按月份统计:
- 每个月的总销售额
- 每月的销售记录数量
- 交叉分析:使用
pd.crosstab()分析销售员在不同月份的销售情况
输出要求: 每个统计结果都要有清晰的说明,解释数据的业务含义
6.8 综合示例:学生成绩管理
|
|
任务: 完成一个完整的电商销售数据分析项目
数据:
|
|
要求:
- 数据准备:创建 DataFrame,添加总价列(单价 × 数量)
- 数据查看:查看数据基本信息,识别数值列和文本列
- 数据筛选:
- 电子类产品的所有订单
- 总价大于3000的订单
- 客户C001的所有购买记录
- 数据分析:
- 按客户统计购买总金额和订单数量
- 按产品统计销售总量和总金额
- 按类别统计平均单价和总销售额
- 数据导出:将分析结果保存为CSV和Excel文件
- 报告生成:输出关键业务指标:
- 总销售额
- 最畅销的产品
- 消费最高的客户
- 平均订单价值
交付物: 完整的代码、保存的数据文件、关键指标报告
本章总结
核心知识点
-
两种数据结构:
- Series:一维带标签数组
- DataFrame:二维表格数据
-
文件读写:
to_csv()/read_csv():CSV 文件操作to_excel()/read_excel():Excel 文件操作
-
数据查看:
head(),tail(),info(),describe()shape,columns,dtypes
-
数据索引:
loc:按标签索引iloc:按位置索引
-
数据筛选:
- 列筛选:
df[['列1', '列2']] - 行筛选:
df[df['条件']]
- 列筛选:
-
数据操作:
- 新建列:直接赋值或使用
apply() - 统计分析:
mean(),max(),min(),groupby()
- 新建列:直接赋值或使用
实用技巧
- 保存 CSV 时使用
encoding='utf-8-sig'避免中文乱码 - 使用
index=False不保存行索引 - 条件筛选时注意使用
&(与)、|(或) groupby()配合agg()进行分组统计
课后作业
- 基础题:创建一个包含10个学生的DataFrame,包含姓名、三科成绩,计算总分和平均分
- 文件操作:将数据保存为CSV和Excel文件,然后重新读取验证
- 数据筛选:找出平均分大于85分的学生,以及数学成绩最高的3名学生
- 统计分析:按性别(可添加该列)分组统计各科平均分
练习要求:每个练习都要使用本章学到的 loc/iloc、条件筛选、新建列等操作。