Python 数据清洗提示词(pandas 处理业务脏数据:日期格式混乱、金额带符号、重复记录、全角空格)

从 ERP、电商后台、CRM 或多人填写的表格导出的数据乱七八糟、没法直接分析时用:先做数据体检,再生成可重复运行的 pandas 清洗脚本,每一步都记录影响了多少行,解析不了的数据单独导出待核查,而不是悄悄丢掉。

NNathaniel bigo··原创首发·AI 辅助撰写
通用大模型 对话模型通用
【角色】你是一名做了多年业务数据分析的数据工程师,处理过各种系统导出的脏数据。你的原则:清洗规则写成代码可重复运行,原始数据永远不动,任何丢弃都要有记录。

【数据情况】
- 数据来源:[如电商后台订单导出]
- 文件格式与规模:[如 xlsx,约 20 万行]
- 字段说明(列名、含义、期望类型):
  [字段说明]
- 样例数据(前 10 行左右,敏感信息已替换):
  [样例数据]
- 我已经发现的问题:[已发现的问题]
- 清洗后的用途:[如做月度销售分析]

【第一步:数据体检】
给出一段体检代码,输出:每列的数据类型、缺失数与缺失率、唯一值个数、最常见的 5 个取值;按主键或业务键统计重复;文本列的首尾空格、全角字符、不可见字符;数值列能否转成数字;日期列有多少种格式。请先等我贴回体检结果,再进入第二步。

【第二步:清洗方案与脚本】
1. 清洗规则表:字段 | 问题 | 规则 | 预计影响行数。常见问题按需处理:
   - 读取时先全部按文本读,避免手机号、订单号、身份证号被转成数字或科学计数法;
   - 去掉首尾空格、全角空格和不可见字符;统一全角与半角;
   - 金额去掉货币符号和千分位逗号后转数值,统一单位(元或分);
   - 日期统一解析,混合格式要逐种处理,Excel 序列号日期(如 45000)要按 1899-12-30 为起点换算;
   - 分类字段统一写法(如「北京」「北京市」「BJ」);
   - 重复记录:明确按什么键去重、保留哪一条(最新、最完整),并说明理由。
2. 清洗脚本:
   - 每个步骤封装成函数,执行后打印受影响的行数;
   - 无法解析的行不丢弃,导出到「待核查.xlsx」并注明原因;
   - 最后输出清洗日志,以及清洗前后的行数和关键字段统计对比。
3. 校验:写几条断言,例如主键唯一、金额非负、日期落在合理范围内。

【约束】
- 不确定的业务规则(如退款订单要不要保留)列为待确认问题,不要自行决定。
- 不编造数据,不用均值之类的值随意填补业务字段的缺失。
- 代码兼容 pandas 2.x。

高亮处换成你自己的内容:[如电商后台订单导出]、[如 xlsx,约 20 万行]、[字段说明]、[样例数据]、[已发现的问题]、[如做月度销售分析]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:[样例数据] 要挑「最脏」的几行贴,比如日期写成「2026.3.5」、金额写成「¥1,280.00」的行,AI 才能针对性地写解析规则。[清洗后的用途] 决定清洗力度:月度汇总能容忍个别失败,对账则一分钱都不能错。

和「科研数据清洗」提示词的区别:那条侧重缺失机制、异常值与论文报告规范;这条侧重业务系统导出数据的格式问题和可重复运行的脚本。

常见坑:

  • 默认读取会把订单号「000123」读成 123,必须按文本读。
  • pd.to_datetime 遇到混合格式时,pandas 2.x 默认按第一个值推断格式,其余格式的日期会解析失败(直接报错,或在 errors="coerce" 时悄悄变成空值),要指定 format="mixed",并抽查「03/05」这类有歧义的值。
  • 去重前先按更新时间排序,否则 keep="last" 保留下来的不一定是最新的记录。

追问技巧:把体检结果贴回去,说「根据这个结果调整清洗规则」;下个月拿到新数据时直接重跑脚本,再追问「这次新增了哪些之前没见过的脏数据模式」。

示例输出

示例,仅供参考(清洗脚本节选)
python
import pandas as pd

raw = pd.read_excel("订单导出.xlsx", dtype=str)   # 全部按文本读,保护订单号与手机号
df = raw.copy()
df.columns = df.columns.str.strip()

# 去首尾空格与全角空格
text_cols = df.columns
df[text_cols] = df[text_cols].apply(lambda s: s.str.replace(" ", " ", regex=False).str.strip())

# 金额:去掉 ¥、千分位逗号和「元」后转数值,失败的记为 NaN
df["金额"] = pd.to_numeric(df["金额"].str.replace(r"[¥,,元]", "", regex=True), errors="coerce")

# 日期:混合格式逐个解析
df["下单时间"] = pd.to_datetime(df["下单时间"], format="mixed", errors="coerce")

bad = df[df["金额"].isna() | df["下单时间"].isna()]
bad.to_excel("待核查.xlsx", index=False)
print(f"无法解析 {len(bad)} 行,已导出待核查;原始 {len(raw)} 行")

同款作品

用这条提示词做出来的作品;原作者会因此获得积分

做同款

还没有同款,来做第一个。

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~