Pandas 教程:从零开始掌握数据处理核心工具
在数据分析的世界里,Pandas 是最不可或缺的 Python 库之一。无论是处理 Excel 表格、CSV 文件,还是清洗复杂的数据集,Pandas 都能让你事半功倍。如果你正在学习数据分析、机器学习,或者只是想高效处理日常数据,那么掌握 Pandas 就是你的第一步。
Pandas 的名字来源于“Panel Data”(面板数据),它最初是为金融数据分析设计的,如今已广泛应用于科研、商业、教育等多个领域。它的核心数据结构是 DataFrame 和 Series,它们就像是电子表格的 Python 版本,但功能强大得多。
本篇 Pandas 教程将带你从安装开始,逐步掌握常用操作,通过真实案例理解其价值。无论你是初学者还是有一定经验的开发者,都能在这里找到实用技巧。
安装与基础导入
在使用 Pandas 之前,你需要先安装它。如果你还没安装,打开终端执行以下命令:
pip install pandas
安装完成后,在你的 Python 脚本中导入 Pandas:
import pandas as pd
我们通常用 pd 作为别名,这样写起来更简洁。这就像给一个工具箱起了个缩写名,方便随时取用。
创建数组与初始化
Pandas 的两个核心对象是 Series 和 DataFrame。你可以把 Series 想象成一列数据,而 DataFrame 就像一张完整的表格。
创建 Series
Series 是一维带标签的数据结构,适合存储单一类型的数据。
scores = pd.Series([85, 92, 78, 96, 88], index=['张三', '李四', '王五', '赵六', '钱七'])
print(scores)
输出:
张三 85
李四 92
王五 78
赵六 96
钱七 88
dtype: int64
✅ 注释:
index参数用于为每个数据项指定标签(如学生姓名),这使得我们可以通过名字快速查找成绩。
创建 DataFrame
DataFrame 是二维表格结构,是 Pandas 的主力工具。它由多个 Series 组成,每一列可以是不同的数据类型。
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
'年龄': [20, 21, 19, 22, 20],
'成绩': [85, 92, 78, 96, 88],
'是否及格': [True, True, False, True, True]
}
df = pd.DataFrame(data)
print(df)
输出:
姓名 年龄 成绩 是否及格
0 张三 20 85 True
1 李四 21 92 True
2 王五 19 78 False
3 赵六 22 96 True
4 钱七 20 88 True
✅ 注释:
data是一个字典,键是列名,值是列表,每个列表长度必须一致。Pandas 会自动对齐这些数据,形成整齐的表格。
数据读取与写入
真实场景中,数据通常来自外部文件。Pandas 支持多种格式,最常见的是 CSV 和 Excel。
读取 CSV 文件
假设你有一个名为 students.csv 的文件,内容如下:
姓名,年龄,成绩,是否及格
张三,20,85,True
李四,21,92,True
王五,19,78,False
赵六,22,96,True
钱七,20,88,True
你可以用以下代码读取它:
df = pd.read_csv('students.csv')
print(df.head(3))
输出:
姓名 年龄 成绩 是否及格
0 张三 20 85 True
1 李四 21 92 True
2 王五 19 78 False
✅ 注释:
head(3)显示前 3 行数据,常用于快速检查文件结构。如果不加参数,默认显示前 5 行。
保存为 CSV 文件
处理完数据后,你可能想把结果保存回去:
df.to_csv('updated_students.csv', index=False)
✅ 注释:
index=False表示不保存行索引(即 0, 1, 2...),否则会在文件中多出一列。这是个常见陷阱,建议始终加上。
数据筛选与条件查询
Pandas 的强大之处在于它能像 SQL 一样灵活筛选数据。
基本条件筛选
比如你想找出所有“是否及格”为 True 的学生:
pass_students = df[df['是否及格'] == True]
print(pass_students)
输出:
姓名 年龄 成绩 是否及格
0 张三 20 85 True
1 李四 21 92 True
3 赵六 22 96 True
4 钱七 20 88 True
✅ 注释:
df['是否及格'] == True返回一个布尔型 Series,Pandas 用它来筛选行。这是数据清洗中最常用的技巧。
多条件组合筛选
如果想找出“年龄大于 20 且成绩大于 90”的学生:
high_performers = df[(df['年龄'] > 20) & (df['成绩'] > 90)]
print(high_performers)
输出:
姓名 年龄 成绩 是否及格
3 赵六 22 96 True
✅ 注释:注意使用
&而不是and,因为这是向量化操作。and会报错。括号()不能省略,否则逻辑优先级出错。
数据分析与统计
Pandas 内置了丰富的统计函数,让你快速洞察数据。
基础统计信息
print(df.describe())
输出:
年龄 成绩
count 5.000000 5.000000
mean 20.400000 88.000000
std 1.140175 6.557437
min 19.000000 78.000000
25% 19.500000 85.000000
50% 20.000000 88.000000
75% 21.000000 92.000000
max 22.000000 96.000000
✅ 注释:
describe()会返回计数、均值、标准差、最小值、四分位数等信息,是快速了解数据分布的黄金工具。
分组统计
假如你想按“是否及格”分组,查看每组的平均成绩:
grouped = df.groupby('是否及格')['成绩'].mean()
print(grouped)
输出:
是否及格
False 78.0
True 90.0
Name: 成绩, dtype: float64
✅ 注释:
groupby()是分组的核心函数。['成绩'].mean()表示只对“成绩”这一列进行平均计算。
数据清洗实战案例
真实数据往往不完美。我们来模拟一个常见问题:缺失值。
处理缺失数据
假设你的数据中,王五的“年龄”缺失了:
df.loc[2, '年龄'] = None # 用 None 表示缺失
print(df.isnull().sum())
输出:
姓名 0
年龄 1
成绩 0
是否及格 0
dtype: int64
✅ 注释:
isnull()检查每个位置是否为空,sum()统计每列的缺失数量。
填充缺失值
你可以选择用均值填充:
df['年龄'].fillna(df['年龄'].mean(), inplace=True)
print(df)
输出:
姓名 年龄 成绩 是否及格
0 张三 20.0 85 True
1 李四 21.0 92 True
2 王五 20.4 78 False
3 赵六 22.0 96 True
4 钱七 20.0 88 True
✅ 注释:
fillna()用于填充空值,inplace=True表示直接修改原数据,而不是返回新对象。
总结与建议
Pandas 教程到这里就接近尾声了。我们从安装开始,学习了如何创建数据结构、读取外部文件、筛选数据、做统计分析,最后还处理了常见的数据清洗问题。
Pandas 的强大在于它的简洁性和灵活性。它让你用几行代码完成原来需要几十行的逻辑。但也要注意,不要滥用它。当数据量超过百万行时,Pandas 可能会变慢,这时可以考虑使用 Dask 或 Polars。
建议你动手实践:找一份真实数据(如 Kaggle 上的公开数据集),尝试用 Pandas 完成一次完整的数据处理流程。从读取、清洗、分析到输出,每一步都写注释,这会极大提升你的编码能力。
最后,记住:掌握 Pandas,就是掌握了数据处理的核心钥匙。无论你是做科研、写报告,还是进入数据行业,它都将成为你最可靠的伙伴。