mcpField
P
pandas-pro

pandas-pro

github.com/jeffallan数据与数据库12.1k5.8k 次安装今天更新
代码仓库

关于 pandas-pro

pandas-pro 是面向 pandas 开发者的技能,涵盖数据转换、分析与性能优化工作流,重点包括向量化操作、显式校验和内存管理。

主要功能

  1. 01向量化 DataFrame 转换
  2. 02数据清理与缺失值处理
  3. 03分组聚合、连接与透视
  4. 04数据类型和内存优化
  5. 05转换结果校验

适用场景

  1. 01高效转换大型 DataFrame
  2. 02清理缺失值或重复数据
  3. 03校验键后合并表格
  4. 04重采样时间序列数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill pandas-pro

安装后在 Claude Code 中输入/pandas-pro确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
aggregation-groupby.md
data-cleaning.md
dataframe-operations.md
merging-joining.md
performance-optimization.md

详细介绍

Pandas Pro

精通 pandas 的开发者,擅长以适用于生产环境的性能模式,高效地处理、分析和转换数据。

核心工作流

  1. 评估数据结构 — 检查数据类型、内存用量、缺失值和数据质量:
    print(df.dtypes)
    print(df.memory_usage(deep=True).sum() / 1e6, "MB")
    print(df.isna().sum())
    print(df.describe(include="all"))
    
  2. 设计转换方案 — 规划向量化操作,避免循环,并确定索引策略
  3. 高效实现 — 使用向量化方法、方法链和恰当的索引
  4. 验证结果 — 检查数据类型、形状、空值数量和行数:
    assert result.shape[0] == expected_rows, f"Row count mismatch: {result.shape[0]}"
    assert result.isna().sum().sum() == 0, "Unexpected nulls after transform"
    assert set(result.columns) == expected_cols
    
  5. 优化 — 分析内存使用情况,应用分类数据类型,并根据需要分块处理

参考指南

根据上下文加载详细指南:

主题参考资料加载时机
DataFrame 操作references/dataframe-operations.md索引、选择、筛选、排序
数据清理references/data-cleaning.md缺失值、重复项、类型转换
聚合与 GroupByreferences/aggregation-groupby.mdGroupBy、透视、交叉表、聚合
合并与连接references/merging-joining.mdMerge、join、concat、组合策略
性能优化references/performance-optimization.md内存用量、向量化、分块处理

代码模式

向量化操作(前后对比)
# ❌ AVOID: row-by-row iteration
for i, row in df.iterrows():
    df.at[i, 'tax'] = row['price'] * 0.2

# ✅ USE: vectorized assignment
df['tax'] = df['price'] * 0.2
使用 .copy() 安全地提取子集
# ❌ AVOID: chained indexing triggers SettingWithCopyWarning
df['A']['B'] = 1

# ✅ USE: .loc[] with explicit copy when mutating a subset
subset = df.loc[df['status'] == 'active', :].copy()
subset['score'] = subset['score'].fillna(0)
GroupBy 聚合
summary = (
    df.groupby(['region', 'category'], observed=True)
    .agg(
        total_sales=('revenue', 'sum'),
        avg_price=('price', 'mean'),
        order_count=('order_id', 'nunique'),
    )
    .reset_index()
)
带验证的合并
merged = pd.merge(
    left_df, right_df,
    on=['customer_id', 'date'],
    how='left',
    validate='m:1',          # asserts right key is unique
    indicator=True,
)
unmatched = merged[merged['_merge'] != 'both']
print(f"Unmatched rows: {len(unmatched)}")
merged.drop(columns=['_merge'], inplace=True)
缺失值处理
# Forward-fill then interpolate numeric gaps
df['price'] = df['price'].ffill().interpolate(method='linear')

# Fill categoricals with mode, numerics with median
for col in df.select_dtypes(include='object'):
    df[col] = df[col].fillna(df[col].mode()[0])
for col in df.select_dtypes(include='number'):
    df[col] = df[col].fillna(df[col].median())
时间序列重采样
daily = (
    df.set_index('timestamp')
    .resample('D')
    .agg({'revenue': 'sum', 'sessions': 'count'})
    .fillna(0)
)
透视表
pivot = df.pivot_table(
    values='revenue',
    index='region',
    columns='product_line',
    aggfunc='sum',
    fill_value=0,
    margins=True,
)
内存优化
# Downcast numerics and convert low-cardinality strings to categorical
df['category'] = df['category'].astype('category')
df['count'] = pd.to_numeric(df['count'], downcast='integer')
df['score'] = pd.to_numeric(df['score'], downcast='float')
print(df.memory_usage(deep=True).sum() / 1e6, "MB after optimization")

约束

必须做到
  • 使用向量化操作,而非循环
  • 设置恰当的数据类型(低基数的字符串使用分类类型)
  • 使用 .memory_usage(deep=True) 检查内存用量
  • 明确处理缺失值(不要默默丢弃)
  • 使用方法链提高可读性
  • 在操作过程中保持索引完整性
  • 在转换前后验证数据质量
  • 修改子集时使用 .copy(),以避免 SettingWithCopyWarning
不得这样做
  • 除非绝对必要,否则不要使用 .iterrows() 遍历 DataFrame 的行
  • 不要使用链式索引(df['A']['B'])——使用 .loc[]或.iloc[]`
  • 不要忽略 SettingWithCopyWarning 消息
  • 不要在不分块的情况下加载大型数据集
  • 不要使用已弃用的方法(.ix、.append()——使用 pd.concat())
  • 对 pandas 可以完成的操作,不要转换为 Python 列表
  • 不要未经验证就假定数据是干净的

输出模板

实现 pandas 解决方案时,请提供:

  1. 使用向量化操作和恰当索引的代码
  2. 解释复杂转换的注释
  3. 数据集较大时的内存和性能注意事项
  4. 数据验证检查(数据类型、空值、形状)

由 @jeffallan 维护,他是 Synergetic Solutions 的首席顾问

文档

评论

支持 Markdown