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% 的常用操作。建议读者在实际项目中多加练习,逐步积累经验,数据分析水平一定会有质的飞跃。