人人都会AI编程

20.2 Pandas:数据处理与分析、Series/DataFrame、数据清洗、聚合统计

更新时间:2026-07-12

Pandas 是 Python 数据科学生态中最核心的工具之一。它的设计目标很明确:让你像操作 Excel 或 SQL 一样方便地处理结构化数据,但同时又拥有编程的灵活性和效率。几乎所有数据清洗、转换、分析的任务,都可以用 Pandas 来完成。

核心数据结构:Series 与 DataFrame

Pandas 提供了两个核心数据结构,理解它们就掌握了 Pandas 的钥匙。

Series:一维带标签的数组

你可以把它想象成 Excel 中的一列数据,每一行都有索引(标签)。

import pandas as pd

# 从列表创建
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s)
# a    10
# b    20
# c    30
# dtype: int64
  • 特点:既有类似列表的数值顺序,又有类似字典的标签访问。可以用 s['b'] 获取值,也可以用 s[1] 或切片。
  • 常见用途:代表数据表中的某一列,或时间序列的一条曲线。

DataFrame:二维带标签的表格

这是最常用的结构,类似 Excel 表格或 SQL 表中的数据。

df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 22],
    '城市': ['北京', '上海', '广州']
})
print(df)
#    姓名  年龄  城市
# 0  张三  25  北京
# 1  李四  30  上海
# 2  王五  22  广州
  • 结构:行索引(如 0,1,2)+ 列名称(姓名, 年龄, 城市)+ 数据值。
  • 基本操作
  • 查看:df.head() 查看前几行,df.shape 查看行列数,df.info() 查看列类型和空值概览。
  • 选择单列:df['年龄'] 得到一个 Series。
  • 选择多列:df[['姓名', '城市']] 得到一个 DataFrame。
  • 按条件筛选:df[df['年龄'] > 24] 获取年龄大于24的所有行。
  • 新增列:df['加分'] = df['年龄'] + 5 直接计算并加为新列。

数据清洗:让原始数据变可用

现实中的数据总是脏的:缺失值、类型错误、重复数据、格式混乱。Pandas 提供了丰富的工具来应对。

缺失值处理

isnull()isna() 检查空值,然后选择删除或填充。

# 去掉任何包含空值的行
df.dropna()

# 用固定值或平均值填充空值
df.fillna({'年龄': df['年龄'].mean(), '城市': '未知'})

类型转换

读入的数据常被误判为 object(字符串),需要转换。

df['年龄'] = df['年龄'].astype(int)
df['日期'] = pd.to_datetime(df['日期'])

去除重复

df.drop_duplicates()  # 移除完全重复的行
df.drop_duplicates(subset=['姓名'])  # 仅按姓名去重

字符串清洗

通过 .str 访问器可以对字符串列进行向量化操作(比循环快很多)。

df['城市'] = df['城市'].str.strip()  # 去除前后空格
df['姓名'] = df['姓名'].str.replace('小', '晓')  # 替换

现实清洗流程通常是:先 info() 查看数据类型和空值 → 处理缺失值 → 修正类型 → 去重 → 格式化字符串 → 验证结果。大多数数据清洗代码会形成一条 Pipeline。

聚合统计:从数据中提炼答案

Pandas 的聚合能力极其强大,相当于用几行代码替代复杂的 Excel 数据透视表或 SQL GROUP BY。

描述性统计

df.describe()  # 自动计算数值列的 count、mean、std、min、max 等
df['年龄'].mean()  # 平均年龄
df['城市'].value_counts()  # 每个城市的数量

分组聚合(groupby)

这是分析中最常用的操作:按某个或多个列分组,然后对每组应用聚合函数。

# 按城市分组,计算每组的平均年龄和人数
result = df.groupby('城市').agg(
    平均年龄=('年龄', 'mean'),
    人数=('姓名', 'count')
).reset_index()
  • 原理groupby('城市') 将数据按城市切割成多个“小表”,agg 对每个小表分别执行指定的统计函数,最后合并结果。
  • 支持的聚合函数meansumcountmaxminstdnunique(唯一值个数)等,还可以自定义函数。

数据透视表

类似 Excel 的透视表,但更灵活。

pd.pivot_table(df, values='年龄', index='城市', columns='性别', aggfunc='mean')

时间序列的滚动计算

如果数据带有时间戳,可以轻松计算移动平均、累计和等。

# 假设 df 是时间序列,按日期排序,计算过去3天的滚动平均值
df['滚动平均'] = df['销售额'].rolling(window=3).mean()

实用总结

Pandas 之所以成为数据分析核心工具,是因为它把表格数据操作变得极其高效且可读。日常工作流通常是:

  1. pd.read_csv() / pd.read_excel() 读入数据
  2. head()info() 快速理解数据结构
  3. 用筛选、清洗、合并 (merge)、重塑 (melt / pivot) 整理数据
  4. groupby 和聚合提炼关键指标
  5. 导出为 CSV、Excel 或传递给可视化库绘图

掌握好 Series、DataFrame、数据清洗、分组聚合这四个模块,就能解决绝大多数的数据处理问题。不需要背下所有方法,学会查阅文档和利用代码提示,在实践中积累经验即可。