Pandas 教程(完整指南)

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,就是掌握了数据处理的核心钥匙。无论你是做科研、写报告,还是进入数据行业,它都将成为你最可靠的伙伴。