让 ChatGPT 写 Pandas 清洗代码时,验收标准应先于代码确定:输入行数、主键唯一性、缺失值处理、类型转换失败和重复行策略都要有断言。只看导出的表格整齐,不能证明没有丢行或把坏值静默变成空值。
先给 ChatGPT 一份数据契约
- order_id 必填且最终唯一。
- amount 必须能转为非负数,失败行进入隔离表。
- 同一 order_id 重复时保留规则必须明确。
- 所有删除或隔离都输出数量和原始 ID。
标题结论:ChatGPT 生成的 Pandas 清洗代码要用固定输入和断言验收缺失值、类型与重复行,不能只检查最终外观。

一个可复查的清洗函数
import pandas as pd
def clean_orders(raw):
df = raw.copy()
df["order_id"] = df["order_id"].astype("string").str.strip()
df["amount_num"] = pd.to_numeric(df["amount"], errors="coerce")
bad = df[df["order_id"].isna() | df["order_id"].eq("") |
df["amount_num"].isna() | df["amount_num"].lt(0)].copy()
good = df.drop(index=bad.index).drop_duplicates("order_id", keep="last")
assert good["order_id"].is_unique
assert good["amount_num"].notna().all() and good["amount_num"].ge(0).all()
return good, bad
raw = pd.DataFrame({"order_id":[" A1 ","A1","B2","C3"],
"amount":["10","12","bad","-1"]})
good, bad = clean_orders(raw)
print(good[["order_id","amount_num"]].to_dict("records"))
print("bad_ids", bad["order_id"].tolist())
读者下一步:把真实规则写成五到十个最小样例和断言,再让 ChatGPT 修改函数,而不是直接把全量敏感文件上传。
验收清单
结果验证:示例应只保留 A1 的最后一条且 amount_num 为 12,B2 与 C3 进入 bad;输入行数应能由保留、隔离和按规则去重的数量对账。
errors=”coerce” 会把不能解析的值变为缺失值,所以必须保留 bad 表;drop_duplicates 的 keep=”last” 只有在“最后一条”有可靠排序含义时才成立。
限制
失败边界:示例数据是人为构造且不含时区、货币、小数精度和多表关联;上传业务数据前还要执行脱敏、权限和保存期限检查。
依据与核验日期
- pandas drop_duplicates 文档:说明重复判断列与保留策略
- pandas to_numeric 文档:说明数值转换和 errors 行为
- pandas 缺失数据指南:说明不同缺失值及检测方式
以上页面于 2026-10-01 核验。版本更新后,应重新查看参数含义和默认值。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31236.html