pandas-pro

pandas-pro

热门

执行 pandas DataFrame 操作,用于数据分析、处理和转换。当处理 pandas DataFrame、数据清洗、聚合、合并或时间序列分析时使用。调用以执行数据操作任务,例如多键连接 DataFrame、透视表、时间序列重采样、通过插值或前向填充处理 NaN 值、分组聚合、类型转换或大数据集的性能优化。

1.1万Star
965Fork
更新于 2026/5/20
SKILL.md
readonly只读
name
pandas-pro
description

执行 pandas DataFrame 操作,用于数据分析、处理和转换。当处理 pandas DataFrame、数据清洗、聚合、合并或时间序列分析时使用。调用以执行数据操作任务,例如多键连接 DataFrame、透视表、时间序列重采样、通过插值或前向填充处理 NaN 值、分组聚合、类型转换或大数据集的性能优化。

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"行数不匹配: {result.shape[0]}"
    assert result.isna().sum().sum() == 0, "转换后出现意外的空值"
    assert set(result.columns) == expected_cols
    
  5. 优化 — 分析内存,应用分类类型,必要时使用分块处理

参考指南

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

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

代码模式

向量化操作(前后对比)

# ❌ 避免:逐行迭代
for i, row in df.iterrows():
    df.at[i, 'tax'] = row['price'] * 0.2

# ✅ 使用:向量化赋值
df['tax'] = df['price'] * 0.2

使用 .copy() 安全子集

# ❌ 避免:链式索引触发 SettingWithCopyWarning
df['A']['B'] = 1

# ✅ 使用:在修改子集时使用 .loc[] 并显式复制
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',          # 断言右键唯一
    indicator=True,
)
unmatched = merged[merged['_merge'] != 'both']
print(f"未匹配行数: {len(unmatched)}")
merged.drop(columns=['_merge'], inplace=True)

缺失值处理

# 前向填充然后插值数值型空缺
df['price'] = df['price'].ffill().interpolate(method='linear')

# 分类列用众数填充,数值列用中位数填充
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,
)

内存优化

# 向下转换数值型,将低基数字符串转换为分类类型
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()
  • 不要将数据转换为 Python 列表进行 pandas 可完成的操作
  • 不要假设数据是干净的而不进行验证

输出模板

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

  1. 使用向量化操作和合适索引的代码
  2. 解释复杂转换的注释
  3. 如果数据集较大,提供内存/性能考虑
  4. 数据验证检查(数据类型、空值、形状)

文档