Pandas 是 Python 生态中最核心的数据分析库之一,它提供了高效的数据结构和数据分析工具。无论是数据清洗、特征工程还是统计分析,Pandas 几乎都是 Python 数据分析师的首选工具。本文将从实际案例出发,系统讲解 Pandas 的核心用法。
一、安装与基础概念
Pandas 的安装非常简单,通过 pip 即可完成:
pip install pandas
安装完成后,导入 Pandas 并创建第一个 DataFrame:
import pandas as pd
data = {
'日期': ['2026-01-01', '2026-01-02', '2026-01-03'],
'销售额': [1200, 1450, 1320],
'客户数': [45, 52, 48]
}
df = pd.DataFrame(data)
print(df)
DataFrame 是 Pandas 最基本的数据结构,类似于 Excel 表格或 SQL 表。每一列可以有不同的数据类型,而每一行则代表一条记录。Series 则是 DataFrame 的单列形式,可以理解为一维带标签的数组。
二、数据导入与导出
在实际工作中,数据通常存储在 CSV、Excel 或数据库文件中。Pandas 提供了非常便捷的读写接口:
# 从 CSV 读取
df = pd.read_csv('data.csv', encoding='utf-8')
# 从 Excel 读取
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 从 SQL 数据库读取(需要 sqlalchemy)
from sqlalchemy import create_engine
engine = create_engine('sqlite:///mydb.db')
df = pd.read_sql('SELECT * FROM users', engine)
# 导出为 CSV
df.to_csv('output.csv', index=False, encoding='utf-8')
# 导出为 Excel
df.to_excel('output.xlsx', sheet_name='分析结果', index=False)
提示:读取大文件时可使用
chunksize 参数分批处理,避免内存溢出。例如 pd.read_csv('bigfile.csv', chunksize=10000) 每次读取 1 万行。三、数据清洗
现实世界的数据往往不完美,数据清洗是数据分析中最耗时但也最关键的环节。以下是一些常见的清洗操作:
3.1 处理缺失值
# 查看缺失值分布
print(df.isnull().sum())
# 删除包含缺失值的行
df_clean = df.dropna()
# 用平均值填充缺失值
df['销售额'] = df['销售额'].fillna(df['销售额'].mean())
# 用前向填充(用前一行的值填充)
df = df.fillna(method='ffill')
3.2 处理重复数据
# 检测重复行
print(df.duplicated().sum())
# 删除所有列完全相同的重复行
df = df.drop_duplicates()
# 基于特定列删除重复
df = df.drop_duplicates(subset=['日期', '客户ID'])
3.3 数据类型转换
# 转换为日期类型
df['日期'] = pd.to_datetime(df['日期'])
# 转换为数值类型(处理含有非数字字符的列)
df['金额'] = pd.to_numeric(df['金额'], errors='coerce')
四、数据筛选与查询
Pandas 提供了多种灵活的数据筛选方式,从简单的布尔索引到复杂的条件查询都能胜任:
# 条件筛选
high_sales = df[df['销售额'] > 1000]
# 多条件筛选
selected = df[(df['销售额'] > 1000) & (df['客户数'] > 30)]
# 使用 query 方法(更可读)
selected = df.query('销售额 > 1000 and 客户数 > 30')
# 按列值筛选
beijing_data = df[df['城市'] == '北京']
# 使用 isin 筛选多个值
target_cities = df[df['城市'].isin(['北京', '上海', '深圳'])]
# 模糊匹配
matches = df[df['产品名'].str.contains('电脑', na=False)]
五、数据聚合与统计
聚合操作是数据分析的核心,groupby 是 Pandas 中最强大的功能之一:
# 按城市分组计算平均销售额
city_avg = df.groupby('城市')['销售额'].mean()
# 多列聚合
summary = df.groupby('城市').agg({
'销售额': ['sum', 'mean', 'count'],
'客户数': 'max'
})
# 按时间和类别分组
daily = df.groupby([df['日期'].dt.date, '类别'])['销售额'].sum()
# 透视表
pivot = pd.pivot_table(df,
values='销售额',
index='日期',
columns='城市',
aggfunc='sum'
)
通过 groupby 结合 agg 方法,可以一次性计算出多种统计指标,代码简洁且执行效率高。
六、数据可视化
Pandas 内置了基于 Matplotlib 的绘图接口,可以快速生成各种图表:
import matplotlib.pyplot as plt
# 折线图
df.set_index('日期')['销售额'].plot(kind='line', figsize=(10, 5))
plt.title('每日销售额趋势')
plt.show()
# 柱状图
city_avg.plot(kind='bar', color='steelblue')
plt.title('各城市平均销售额')
plt.show()
# 饼图
df.groupby('类别')['销售额'].sum().plot(kind='pie', autopct='%1.1f%%')
plt.title('各类别销售占比')
plt.show()
七、性能优化技巧
处理大规模数据时,以下几点可以显著提升 Pandas 的执行效率:
- 使用合适的数据类型:将字符串列转换为 category 类型可节省大量内存
- 向量化操作:能用 apply 处理的尽量不用遍历循环
- 分块读取:超大文件用 chunksize 分批处理,避免一次性加载全部数据
- 优先使用内置方法:Pandas 的 .str、.dt 等方法比自定义函数快得多
- 适当使用 inplace:防止创建不必要的副本,节省内存
# 内存优化示例
df['大分类'] = df['产品名'].astype('category')
print(df.memory_usage(deep=True).sum() / 1024**2, 'MB')
总结
Pandas 是 Python 数据分析的基石,掌握它意味着你已经具备了高效处理结构化数据的能力。本文从安装入门到高级聚合,涵盖了一个数据分析师日常工作中 90% 的常用操作。建议读者在实际项目中多加练习,逐步积累经验,数据分析水平一定会有质的飞跃。