mcpField
P
pandas-best-practices

pandas-best-practices

github.com/mindrally数据与数据库287893 次安装3 周前更新
代码仓库

关于 pandas-best-practices

面向使用 pandas 进行数据处理与分析的开发者,提供实用指南,重点涵盖可复现的数据转换、数据验证、高效操作及常见问题。

主要功能

  1. 01DataFrame 读取与选择
  2. 02清晰的方法链式调用
  3. 03缺失数据与质量检查
  4. 04分组与重塑
  5. 05内存和计算优化

适用场景

  1. 01清理并验证数据集
  2. 02转换和汇总表格
  3. 03处理时间序列数据
  4. 04提升 DataFrame 性能

安装

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

$npx skills add https://github.com/mindrally/skills --skill pandas-best-practices

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

详细介绍

Pandas 最佳实践

面向 Pandas 开发的专家指南,重点关注数据处理、分析和高效的 DataFrame 操作。

代码风格和结构

  • 编写简洁、专业的回答,并提供准确的 Python 示例
  • 优先保证数据分析工作流的可复现性
  • 使用函数式编程;避免不必要的类
  • 优先使用向量化操作,而非显式循环
  • 使用能反映数据内容的描述性变量名
  • 遵循 PEP 8 风格指南

DataFrame 创建和 I/O

  • 使用 pd.read_csv()、pd.read_excel()、pd.read_json(),并设置合适的参数
  • 指定 dtype 参数,确保加载时使用正确的数据类型
  • 使用 parse_dates 自动解析日期时间
  • 数据包含自然索引列时,设置 index_col
  • 使用 chunksize 增量读取大型文件

数据选择

  • 使用 .loc[] 按标签索引
  • 使用 .iloc[] 按整数位置索引
  • 避免链式索引(例如 df['col'][0]),改用 .loc 或 .iloc
  • 使用布尔索引进行条件选择:df[df['col'] > value]
  • 使用 .query() 方法处理复杂筛选条件

方法链式调用

  • 在可能的情况下,优先使用方法链进行数据转换
  • 使用 .pipe() 在链中应用自定义函数
  • 链式调用 .assign()、.query()、.groupby()、.agg() 等操作
  • 将链拆分为多行,保持可读性

数据清理和验证

缺失数据
  • 使用 .isna() 和 .info() 检查缺失数据
  • 以适当方式处理缺失数据:.fillna()、.dropna() 或插补
  • 对可空整数和布尔类型使用 pd.NA
  • 记录缺失数据处理决策
数据质量检查
  • 在分析开始时执行数据质量检查
  • 使用 .dtypes 验证数据类型,并按需转换
  • 使用 .duplicated() 检查重复项并妥善处理
  • 使用 .describe() 快速查看统计概况
类型转换
  • 使用 .astype() 显式转换类型
  • 使用 pd.to_datetime() 解析日期
  • 使用 pd.to_numeric(),并设置 errors='coerce',以安全地转换为数值
  • 对基数较低的字符串列使用分类数据类型

分组和聚合

GroupBy 操作
  • 使用 .groupby() 高效执行聚合操作
  • 使用 .agg() 指定多个操作的聚合函数
  • 使用命名聚合,让输出列名更清晰
  • 考虑使用 .transform() 将结果广播回原始形状
透视表和重塑
  • 使用 .pivot_table() 进行多维聚合
  • 使用 .melt() 将宽格式转换为长格式
  • 使用 .pivot() 将长格式转换为宽格式
  • 使用 .stack() 和 .unstack() 操作分层索引

性能优化

内存效率
  • 对基数较低的字符串使用分类数据类型
  • 在适当情况下缩窄数值类型
  • 使用 pd.eval() 和 .eval() 对大型表达式求值
计算速度
  • 使用向量化操作,而非对每行使用 .apply()
  • 优先使用内置聚合函数,而非自定义函数
  • 在 NumPy 操作中,如果速度更快,可使用 .values 或 .to_numpy()
避免常见问题
  • 避免使用 .iterrows() 进行迭代,改用向量化操作
  • 不要在迭代过程中修改 DataFrame
  • 注意 SettingWithCopyWarning;必要时使用 .copy()
  • 避免逐行扩展 DataFrame;先收集到列表中,再一次性创建

时间序列操作

  • 对时间序列数据使用 DatetimeIndex
  • 使用 .resample() 进行基于时间的聚合
  • 使用 .shift() 和 .diff() 进行滞后运算
  • 使用 .rolling() 和 .expanding() 进行窗口计算

合并和连接

  • 使用 .merge() 执行 SQL 风格的连接
  • 指定 how 参数:'inner'、'outer'、'left'、'right'
  • 使用 validate 参数检查连接基数
  • 使用 .concat() 堆叠 DataFrame

关键约定

  • 导入时使用 import pandas as pd
  • 尽可能为列名使用 snake_case
  • 记录数据来源和转换过程
  • 保持笔记本可复现,并明确单元格的执行顺序

评论

支持 Markdown