关于 data-python
data-python 是面向 Python 数据处理的技能,涵盖 pandas、polars 和 pyspark。它通过向量化、模式校验和内存优化等 DataFrame 做法,帮助代码适应更大规模的数据。
主要功能
- 01向量化 DataFrame 操作
- 02模式校验
- 03显式处理数据类型
- 04降低处理内存占用
- 05链式转换
- 06数据管道错误处理
适用场景
- 01用 DataFrame 操作替代逐行循环
- 02校验输入数据模式
- 03减少大型数据集的内存占用
- 04构建清晰的转换流程
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ alexanderstephenthompson/ claude-hub --skill data-python安装后在 Claude Code 中输入/data-python确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/pandas-cheatsheet.mdreferences/memory-optimization.mdvectorization.md详细介绍
Data Python 技能
版本: 1.0 技术栈: Python(pandas、polars、pyspark)
Python 很容易让你写出能处理样例数据、却无法处理真实数据的数据处理代码。iterrows() 处理 1 万行要花 30 秒,处理 1000 万行则要花 30 分钟。未显式指定数据类型的 DataFrame 会占用所需内存的 8 倍。链式索引会生成不易察觉的副本,导致更改丢失。这些并非边缘情况,而是按常规 Python 的写法使用 pandas 时的默认行为。
向量化操作、显式模式和恰当的数据类型能让代码从原型扩展到生产环境,无需重写。
适用范围与边界
此技能涵盖:
- DataFrame 模式(pandas、polars、pyspark)
- 数据类型处理与验证
- 内存高效处理
- 使用向量化操作代替循环
- 方法链模式
- 数据管道的错误处理
由其他技能负责:
code-quality:通用代码结构、测试、命名data-sql:使用 SQL 接口时的查询模式data-pipelines:编排与 ETL 架构
适用场景: 编写处理数据的 Python 代码。
核心原则
- 向量化,不要循环 — 使用 DataFrame 操作,而不是逐行迭代。
- 发现坏数据时立即失败 — 尽早验证,在边界处拒绝无效数据。
- 关注内存 — 了解数据规模,使用恰当的数据类型。
- 不可变转换 — 链式调用操作,不要原地修改。
- 显式模式 — 提前定义预期的列和类型。
模式
方法链
# Good - readable pipeline
result = (
df
.query("status == 'active'")
.assign(total=lambda x: x["quantity"] * x["price"])
.groupby("category")
.agg({"total": "sum"})
.sort_values("total", ascending=False)
)
# Bad - intermediate variables obscure flow
filtered = df[df["status"] == "active"]
filtered["total"] = filtered["quantity"] * filtered["price"]
grouped = filtered.groupby("category")
result = grouped.agg({"total": "sum"})
result = result.sort_values("total", ascending=False)
模式验证
EXPECTED_COLUMNS = {"id", "name", "value", "timestamp"}
REQUIRED_COLUMNS = {"id", "value"}
def validate_schema(df: pd.DataFrame) -> pd.DataFrame:
missing = REQUIRED_COLUMNS - set(df.columns)
if missing:
raise ValueError(f"Missing required columns: {missing}")
return df[list(EXPECTED_COLUMNS & set(df.columns))]
类型优化
def optimize_dtypes(df: pd.DataFrame) -> pd.DataFrame:
"""Downcast numeric types to reduce memory."""
for col in df.select_dtypes(include=["int"]).columns:
df[col] = pd.to_numeric(df[col], downcast="integer")
for col in df.select_dtypes(include=["float"]).columns:
df[col] = pd.to_numeric(df[col], downcast="float")
return df
反模式
| 反模式 | 问题 | 修正方法 |
|---|---|---|
for row in df.iterrows() | 速度慢,有违向量化原则 | 使用向量化操作 |
df["col"] = df.apply(...) | 通常比向量化操作慢 | 使用 np.where 或 df.assign |
链式索引 df["a"]["b"] | SettingWithCopyWarning | 使用 df.loc[:, "a"] |
| 为检查模式而加载整个文件 | 浪费内存 | 使用 nrows=100 或分块读取 |
| 读取时忽略数据类型 | 内存膨胀 | 指定 dtype= 参数 |
检查清单
- 不使用
iterrows()或itertuples()进行计算 - 读取文件时显式指定数据类型
- 在边界处验证模式
- 使用方法链进行转换
- 对大型数据集进行内存分析
参考资料
references/vectorization.md— 向量化操作与性能references/memory-optimization.md— 内存优化技巧
资源
assets/pandas-cheatsheet.md— pandas 操作速查表
评论
支持 Markdown