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对每个小表分别执行指定的统计函数,最后合并结果。 - 支持的聚合函数:
mean、sum、count、max、min、std、nunique(唯一值个数)等,还可以自定义函数。
数据透视表
类似 Excel 的透视表,但更灵活。
pd.pivot_table(df, values='年龄', index='城市', columns='性别', aggfunc='mean')
时间序列的滚动计算
如果数据带有时间戳,可以轻松计算移动平均、累计和等。
# 假设 df 是时间序列,按日期排序,计算过去3天的滚动平均值
df['滚动平均'] = df['销售额'].rolling(window=3).mean()
实用总结
Pandas 之所以成为数据分析核心工具,是因为它把表格数据操作变得极其高效且可读。日常工作流通常是:
- 用
pd.read_csv()/pd.read_excel()读入数据 - 用
head()、info()快速理解数据结构 - 用筛选、清洗、合并 (
merge)、重塑 (melt/pivot) 整理数据 - 用
groupby和聚合提炼关键指标 - 导出为 CSV、Excel 或传递给可视化库绘图
掌握好 Series、DataFrame、数据清洗、分组聚合这四个模块,就能解决绝大多数的数据处理问题。不需要背下所有方法,学会查阅文档和利用代码提示,在实践中积累经验即可。