pandas 全景解析:一次性搞懂「Python 数据分析瑞士军刀」
·
如果你只能学一个 Python 第三方库,pandas 大概率就是答案。
—— Wes McKinney(pandas 之父)
本文用「一条主线 + 一张思维导图 + 一份速查表 + 十个高频代码片段」带你由浅入深吃透 pandas。
一、为什么非学 pandas 不可?
- 统一接口:无论数据源是 CSV、Excel、SQL、JSON 还是 Parquet,一句
read_*即可变 DataFrame。 - 内存友好:底层基于 NumPy + Block Manager,比纯 Python 列表快 10~100 倍。
- 生态王者: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'])) |
五、性能优化三板斧
-
向量化:避免
for循环,直接使用 pandas/NumPy 内置函数。# ❌ 慢 df['double'] = [x*2 for x in df['value']] # ✅ 快 df['double'] = df['value'] * 2 -
类型优化
df['category'] = df['category'].astype('category') # 内存 ↓80% -
分块 & 并行
# 大文件分块读取 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 |
八、一张「学习路线图」
- 入门:Series & DataFrame 创建/索引/切片
- 进阶:缺失值处理、分组聚合、重塑变形(
melt/pivot) - 实战:时间序列、金融数据、机器学习特征工程
- 性能:Profiling、并行、pyarrow、Polars 对比
九、小结 & 资源
- 官方文档:https://pandas.pydata.org/docs/
- 速查海报:pandas-cheatsheet.pdf(公众号回复「pandas」领取)
- 练习数据集:Kaggle → “Pandas-Exercises” 仓库
记住:pandas 不是「Excel 的替代品」,而是「Excel 的超能力扩展」。
当你能用 3 行代码完成原来 30 次点击的操作,你会爱上它。
更多推荐
所有评论(0)