关于 pandas-best-practices
面向使用 pandas 进行数据处理与分析的开发者,提供实用指南,重点涵盖可复现的数据转换、数据验证、高效操作及常见问题。
主要功能
- 01DataFrame 读取与选择
- 02清晰的方法链式调用
- 03缺失数据与质量检查
- 04分组与重塑
- 05内存和计算优化
适用场景
- 01清理并验证数据集
- 02转换和汇总表格
- 03处理时间序列数据
- 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