在数据科学和大数据开发领域,Pandas 无疑是最璀璨的明星工具之一。它底层基于 NumPy 构建,提供了高性能、易用的数据结构和丰富的数据分析函数,极大地简化了数据清洗、转换与统计分析的开发流程。
- 官方网站 :https://pandas.pydata.org
- 环境依赖:底层依赖 NumPy 进行高效的高维数组与矩阵运算
⚠️ 环境准备 :
注意在 Python 环境中使用
pip安装(而非 npm):
bashpip install pandas
🎯 什么是 DataFrame 与 Series?
Pandas 的世界主要由两大核心数据结构支撑:
- DataFrame:表格型的数据结构,就像一张 Excel 表格或 SQL 表,既有行索引(Index),也有列索引(Columns)。
- Series:一维标记数组,就像表格中的单独一列。
核心关系:DataFrame 是由多个具有相同索引的 Series 组成的二维容器;从 DataFrame 中抽取任意一列,拿到的就是一个 Series。
🚀 实战案例:统计班级各科成绩
业务需求
统计某班级学员在"语文"、"数学"、"英语"三门课程中的最高分 、最低分 与平均分。
代码实现
python
import pandas as pd
# 1. 构造 DataFrame 数据集
df = pd.DataFrame([
{'姓名': '张三', '语文': 85, '数学': 92, '英语': 78},
{'姓名': '李四', '语文': 78, '数学': 88, '英语': 95},
{'姓名': '王五', '语文': 92, '数学': 96, '英语': 89},
{'姓名': '赵六', '语文': 85, '数学': 90, '英语': 90},
{'姓名': '孙七', '语文': 72, '数学': 59, '英语': 66},
{'姓名': '周八', '语文': 80, '数学': 76, '英语': 68},
])
# 2. 统计计算(调用单列 Series 聚合函数)
print(f"语文 -> 最高分: {df['语文'].max()}, 最低分: {df['语文'].min()}, 平均分: {df['语文'].mean():.2f}")
print(f"数学 -> 最高分: {df['数学'].max()}, 最低分: {df['数学'].min()}, 平均分: {df['数学'].mean():.2f}")
print(f"英语 -> 最高分: {df['英语'].max()}, 最低分: {df['英语'].min()}, 平均分: {df['英语'].mean():.2f}")
🔥 进阶小技巧 :
如果想快速查看所有数值列的统计指标,可以直接使用
df.describe(),计数、均值、极值、分位数一览无余!
🛠️ 核心进阶:DataFrame 的常用构建方式
在实际项目中,数据来源多种多样,Pandas 提供了极具弹性的构造方式:
方式 1:列表嵌套字典(按行解析)
每个字典代表一行数据,字典的 key 自动作为列名:
python
df1 = pd.DataFrame([
{'姓名': '张三', '语文': 85, '数学': 92, '英语': 78},
{'姓名': '李四', '语文': 78, '数学': 88, '英语': 95},
{'姓名': '王五', '语文': 92, '数学': 96, '英语': 89}
])
方式 2:字典嵌套列表(按列解析,最推荐)
每个 key 是列名,对应的 list 为该列的所有取值:
python
df2 = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'语文': [85, 78, 92],
'数学': [92, 88, 96],
'英语': [78, 95, 89]
})
方式 3:元组列表 + columns 参数
传入二维元组列表,并通过 columns 参数定义表头:
python
df3 = pd.DataFrame([
('张三', 85, 92, 78),
('李四', 78, 88, 95),
('王五', 92, 96, 89)
], columns=['姓名', '语文', '数学', '英语'])
方式 4:二维列表 + columns + index
在定义数据和列名的同时,显式指定行索引(index):
python
df4 = pd.DataFrame([
['张三', 85, 92, 78],
['李四', 78, 88, 95],
['王五', 92, 96, 89]
], columns=['姓名', '语文', '数学', '英语'], index=['a', 'b', 'c'])
🛠️ 核心进阶:Series 的常用构建方式
Series 是一维标记数组,常见构建方式如下:
python
import pandas as pd
# 1. 普通列表构建(默认自动生成 0, 1, 2... 数字索引)
s1 = pd.Series([10, 20, 30, 40, 50])
# 2. 元组构建并指定自定义标签索引(index)
s2 = pd.Series((10, 20, 30, 40, 50), index=['a', 'b', 'c', 'd', 'e'])
# 3. 字典构建(字典 key 自动转化为 Series 的 index)
s3 = pd.Series({'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50})
# 4. 从已有的 DataFrame 中抽取某列
s4 = df1['语文']
s5 = df1['数学']
📋 必备速查:DataFrame 与 Series 常见属性
熟练掌握基础属性,能让你在处理数据清洗和维度变换时更加游刃有余:
| 属性名称 | 作用说明 | 适用对象 | 示例输出 |
|---|---|---|---|
xx.shape |
获取数据维度(行数, 列数) | DataFrame / Series | (6, 4) |
xx.columns |
获取所有列名/列标签 | DataFrame 特有 | Index(['姓名', '语文', ...]) |
xx.index |
获取行标签/行索引 | DataFrame / Series | RangeIndex(start=0, stop=6) |
xx.values |
获取纯数据底层表示(NumPy ndarray) | DataFrame / Series | array([[...], [...]]) |
xx.dtype |
获取单列的数据类型 | Series 特有 | int64 / object |
xx.dtypes |
获取各列对应的数据类型 | DataFrame 特有 | 各字段类型列表 |
xx.size |
获取数据元素的总个数(行 × 列) | DataFrame / Series | 24 |
示例代码
python
# 查看 DataFrame 的维度与字段名
print(df.shape) # (6, 4)
print(df.columns) # Index(['姓名', '语文', '数学', '英语'], dtype='object')
# 查看 Series 的类型与值
print(df['语文'].dtype) # int64
print(df['语文'].values) # [85 78 92 85 72 80]
💡 总结与回顾
- 基本模型 :Pandas 的基石是
Series(一维序列)和DataFrame(二维表格)。 - 统计计算 :借助
.max()、.min()、.mean()等聚合函数,能秒级完成批量统计。 - 数据感知 :通过
.shape查维度、.columns查表头、.index查索引、.values探底层,是数据探查的第一步。