如果你只能学一个 Python 第三方库,pandas 大概率就是答案。
—— Wes McKinney(pandas 之父)

本文用「一条主线 + 一张思维导图 + 一份速查表 + 十个高频代码片段」带你由浅入深吃透 pandas。


一、为什么非学 pandas 不可?

  1. 统一接口:无论数据源是 CSV、Excel、SQL、JSON 还是 Parquet,一句 read_* 即可变 DataFrame
  2. 内存友好:底层基于 NumPy + Block Manager,比纯 Python 列表快 10~100 倍
  3. 生态王者:scikit-learn、TensorFlow、Streamlit、Dash、Matplotlib 全部把 DataFrame 当“一等公民”。

二、核心数据结构(牢记两张图)

结构 维度 索引 类比 创建示例
Series 1D 行索引 带标签的数组 pd.Series([1,2,3])
DataFrame 2D 行索引 + 列索引 电子表格 pd.DataFrame({'x':[1,2], 'y':[3,4]})

三、一条典型数据处理流水线

import pandas as pd

# 1️⃣ 读取
df = pd.read_csv('sales.csv')

# 2️⃣ 清洗
df = df.dropna(subset=['price'])            # 丢空值
df['date']   = pd.to_datetime(df['date'])   # 转日期
df['region'] = df['region'].astype('category')  # 节省内存

# 3️⃣ 转换
df['revenue'] = df['price'] * df['qty']
monthly = df.groupby(df['date'].dt.to_period('M'))['revenue'].sum()

# 4️⃣ 输出
monthly.to_excel('月度汇总.xlsx')

四、高频 API 速查表(建议收藏)

需求 一行代码示例
按列筛选 df[df['price']>100]
多条件 df.query("price>100 & region=='East'")
去重 df.drop_duplicates(subset=['id'])
缺失值填充 df['discount'].fillna(0)
排序 df.sort_values(['date','price'], ascending=[True,False])
分组聚合 df.groupby('region')['revenue'].agg(['sum','mean'])
透视表 pd.pivot_table(df, index='region', columns='month', values='revenue')
行/列重命名 df.rename(columns={'old':'new'})
合并两张表 pd.merge(df1, df2, on='key', how='left')
拆分-应用-合并 df.assign(log_price=lambda x: np.log(x['price']))

五、性能优化三板斧

  1. 向量化:避免 for 循环,直接使用 pandas/NumPy 内置函数。

    # ❌ 慢
    df['double'] = [x*2 for x in df['value']]
    # ✅ 快
    df['double'] = df['value'] * 2
    
  2. 类型优化

    df['category'] = df['category'].astype('category')  # 内存 ↓80%
    
  3. 分块 & 并行

    # 大文件分块读取
    for chunk in pd.read_csv('big.csv', chunksize=100_000):
        process(chunk)
    

六、与 Excel 的 1:1 映射

Excel 操作 pandas 写法
筛选 df[condition]
排序 df.sort_values()
透视表 pd.pivot_table
VLOOKUP pd.merge(df1, df2, on='key', how='left')
条件格式 df.style.applymap(color_negative_red)

七、常见坑 & 对策

对策
链式赋值警告 (SettingWithCopyWarning) .loc[row_indexer, col_indexer] = value
日期解析失败 pd.to_datetime(..., errors='coerce')
多索引切片困惑 df.loc[('A', 2024), :]
内存爆炸 指定 dtype / 分块读取 / 转 category

八、一张「学习路线图」

  1. 入门:Series & DataFrame 创建/索引/切片
  2. 进阶:缺失值处理、分组聚合、重塑变形(melt/pivot
  3. 实战:时间序列、金融数据、机器学习特征工程
  4. 性能:Profiling、并行、pyarrow、Polars 对比

九、小结 & 资源

  • 官方文档https://pandas.pydata.org/docs/
  • 速查海报:pandas-cheatsheet.pdf(公众号回复「pandas」领取)
  • 练习数据集:Kaggle → “Pandas-Exercises” 仓库

记住:pandas 不是「Excel 的替代品」,而是「Excel 的超能力扩展」。
当你能用 3 行代码完成原来 30 次点击的操作,你会爱上它。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐