mcpField
P
pandas-pro

pandas-pro

github.com/midudev数据与数据库7.0k61 次安装1 周前更新
代码仓库

关于 pandas-pro

Pandas Pro 是一项指导使用 pandas 处理、分析和转换数据的技能,重点在结果验证与性能优化。适合需要清洗、合并和优化 DataFrame 的开发者。

主要功能

  1. 01向量化 DataFrame 操作
  2. 02数据清洗与缺失值处理
  3. 03分组、聚合与连接
  4. 04转换结果验证
  5. 05内存与性能优化

适用场景

  1. 01清洗和转换表格数据
  2. 02按组汇总数据
  3. 03验证键后合并数据集
  4. 04降低 DataFrame 内存占用

安装

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

$npx skills add https://github.com/midudev/autoskills --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