文章摘要本文以 Gemini 3.5-flash 辅助 Python 数据清洗为例介绍从需求拆解、规则梳理、脚本生成到测试验证的完整流程。通过 CSV 清洗案例展示如何用 Prompt 约束 AI 输出、生成可 Review 的 Pandas 代码、补充 pytest 用例并结合人工抽样、多模型对比和安全边界提升数据处理脚本的可靠性。在业务系统里很多 Python 脚本并不是用来做复杂算法而是处理一些“脏数据”运营导出的 CSV、客服整理的 Excel、历史系统迁移出来的用户表、第三方平台回传的订单明细等。这类任务看似简单实际很容易踩坑字段名不统一日期格式混乱金额有字符串、空值、非法字符手机号、邮箱等字段需要脱敏同一用户重复出现清洗规则写完后没人补测试脚本跑一次能用过几周没人敢改。这篇文章以 Gemini 3.5-flash 为例分享一个适合 CSDN 技术社区的实用流程如何让 AI 辅助 Python 开发者完成数据清洗需求拆解、脚本草稿生成、测试用例补全和人工验证。如果只是想低门槛比较多个模型在同一个数据清洗任务下的输出差异也可以了解KULAAIhttps://ouai.me这类多模型聚合工具。它支持 Gemini、ChatGPT、Claude、DeepSeek 等模型切换适合用于模型能力对比、Prompt 调试和日常开发辅助验证。但工具本身不是重点重点是建立清晰的输入、可 Review 的输出和必要的测试流程。一、为什么这个场景适合 Gemini 3.5-flashGemini 3.5-flash 比较适合处理结构化信息比如表格、字段说明、规则清单、日志摘要、数据转换要求。对于 Python 数据清洗任务它的价值主要体现在把口语化需求整理成字段级规则根据样例数据推断异常情况生成 Pandas 脚本草稿补充边界测试用例把清洗流程整理成 README 或交接文档。不过要注意AI 生成的数据处理代码不能直接上线尤其是涉及订单、财务、用户隐私、权限数据时必须经过人工 Review 和样本验证。简单对比一下模型更适合的任务Gemini 3.5-flash表格整理、字段规则归纳、结构化输出、快速生成草稿ChatGPT通用方案拆解、代码草稿、Prompt 迭代Claude长文档理解、需求重写、上下文一致性检查DeepSeek中文技术问答、代码解释、推理型问题、中文文档整理我的习惯是先用 Gemini 3.5-flash 做规则梳理和脚本初稿再用人工测试和少量多模型交叉验证检查遗漏。二、案例背景清洗一份用户导入 CSV假设运营给了一个users.csv内容类似csvuser_id,name,phone,email,register_time,total_amount 1001,张三,13800138000,zhangsanexample.com,2024/01/02,129.90 1002,李四,13800138001,,2024-01-05,88元 1002,李四,13800138001,,2024-01-05,88元 1003,王五,invalid,wuwangexample.com,2024.01.08,- 1004,,13900139000,testexample.com,,35.5业务方希望清洗后得到去除重复用户手机号非法的记录标记出来邮箱为空时填充为空字符串注册时间统一为YYYY-MM-DD金额字段转为数字非法金额置为 0姓名为空的记录保留但标记为name_missingtrue输出清洗后的 CSV 和异常数据 CSV。如果直接开始写代码很容易漏掉边界条件。更稳妥的做法是先让 AI 整理规则。三、先让 AI 拆规则不要一上来写代码可复制 Prompt需求拆解你是一名 Python 数据清洗助手熟悉 Pandas。 下面是一份 CSV 清洗需求请不要直接写代码。请先完成 1. 提取字段级清洗规则 2. 列出可能的异常数据 3. 给出清洗后输出字段 4. 给出需要业务确认的问题 5. 按表格输出方便开发和测试 Review。 需求如下 - 去除重复用户 - 手机号非法的记录标记出来 - 邮箱为空时填充为空字符串 - 注册时间统一为 YYYY-MM-DD - 金额字段转为数字非法金额置为 0 - 姓名为空的记录保留但标记 name_missingtrue - 输出清洗后的 CSV 和异常数据 CSV。比较理想的输出应该包含这些点字段清洗规则异常情况user_id作为用户唯一标识重复时保留一条缺失、重复phone校验是否为 11 位手机号非数字、长度不对email空值填充为空字符串格式非法是否处理需确认register_time统一日期格式空值、无法解析total_amount提取数字并转 float88元、-、空值name空值保留增加name_missing标记这一步的价值是减少“AI 直接写错代码”的概率也方便和业务方确认规则。四、生成可 Review 的 Python 脚本草稿规则确认后再让 Gemini 3.5-flash 生成代码更合适。可复制 Prompt生成脚本请基于以下规则生成一个 Python Pandas 数据清洗脚本 输入文件users.csv 输出文件 1. users_clean.csv 2. users_invalid.csv 要求 - 去除重复 user_id保留第一条 - phone 必须是 11 位数字否则标记 phone_validfalse - email 为空填充为空字符串 - register_time 尽量解析为 YYYY-MM-DD无法解析则为空 - total_amount 提取数字并转为 float非法金额为 0 - name 为空时增加 name_missingtrue - 异常数据 CSV 包含 phone 非法或 register_time 解析失败的记录 - 代码要有函数拆分便于单元测试 - 不要写复杂框架只用 pandas 和标准库。脚本草稿可以类似这样import re import pandas as pd def clean_amount(value): if pd.isna(value): return 0.0 text str(value).strip() match re.search(r\d(\.\d)?, text) if not match: return 0.0 return float(match.group()) def normalize_date(value): if pd.isna(value) or str(value).strip() : return dt pd.to_datetime(value, errorscoerce) if pd.isna(dt): return return dt.strftime(%Y-%m-%d) def is_valid_phone(value): if pd.isna(value): return False text str(value).strip() return bool(re.fullmatch(r\d{11}, text)) def clean_users(input_path, clean_output_path, invalid_output_path): df pd.read_csv(input_path, dtypestr) df df.drop_duplicates(subset[user_id], keepfirst) df[email] df[email].fillna() df[name_missing] df[name].isna() | (df[name].str.strip() ) df[phone_valid] df[phone].apply(is_valid_phone) df[register_time_normalized] df[register_time].apply(normalize_date) df[total_amount_clean] df[total_amount].apply(clean_amount) invalid_df df[ (~df[phone_valid]) | ( df[register_time].notna() (df[register_time].str.strip() ! ) (df[register_time_normalized] ) ) ] df.to_csv(clean_output_path, indexFalse, encodingutf-8-sig) invalid_df.to_csv(invalid_output_path, indexFalse, encodingutf-8-sig) if __name__ __main__: clean_users(users.csv, users_clean.csv, users_invalid.csv)这段代码已经可用但仍然只是草稿。比如手机号是否只校验 11 位数字、金额中的负数如何处理、重复用户保留第一条还是最后一条都要继续确认。五、让 AI 补测试用例而不是只看脚本能不能跑数据清洗脚本最容易出现的问题是样例数据能跑真实数据一来就崩。建议至少补充函数级测试。可复制 Prompt生成测试用例请为下面几个函数设计 pytest 测试用例 - clean_amount - normalize_date - is_valid_phone 要求 1. 覆盖正常值、空值、非法值 2. 覆盖中文金额如“88元” 3. 覆盖不同日期格式 4. 输出 pytest 代码 5. 不要依赖真实 CSV 文件。示例测试from clean_users import clean_amount, normalize_date, is_valid_phone def test_clean_amount_normal(): assert clean_amount(129.90) 129.90 assert clean_amount(88元) 88.0 def test_clean_amount_invalid(): assert clean_amount(-) 0.0 assert clean_amount() 0.0 assert clean_amount(None) 0.0 def test_normalize_date(): assert normalize_date(2024/01/02) 2024-01-02 assert normalize_date(2024-01-05) 2024-01-05 assert normalize_date(2024.01.08) 2024-01-08 def test_normalize_date_invalid(): assert normalize_date() assert normalize_date(not-a-date) def test_is_valid_phone(): assert is_valid_phone(13800138000) is True assert is_valid_phone(invalid) is False assert is_valid_phone(123) is FalseAI 生成测试后也要人工补充项目特有规则。例如金额是否允许负数、手机号是否要支持区号、日期是否存在时区问题等。六、AI 输出结果怎么验证我一般从四个层面验证 AI 生成的数据清洗代码。1. 用小样本验证准备 1020 行覆盖典型情况的数据正常记录空姓名空邮箱非法手机号重复用户不同日期格式非法金额缺失字段。先跑小样本再跑全量数据。2. 用统计结果验证清洗前后输出一些统计值print(rows:, len(df)) print(invalid phones:, (~df[phone_valid]).sum()) print(missing names:, df[name_missing].sum()) print(invalid rows:, len(invalid_df))不要只看脚本是否报错还要看结果数量是否符合预期。3. 用单元测试验证核心函数clean_amount、normalize_date、is_valid_phone这类函数适合单测。它们越稳定脚本越容易维护。4. 用人工抽样验证随机抽取 20 行清洗结果对照原始数据人工检查。尤其是金额、日期、用户唯一标识这类字段不能完全交给 AI 判断。七、多模型工具的判断标准如果需要比较 ChatGPT、Claude、Gemini、DeepSeek 等模型在同一任务上的输出可以重点看这些指标是否能正确理解字段规则是否会主动提示边界条件代码是否可运行函数拆分是否便于测试是否编造不存在的库或 API是否能生成有效测试用例对隐私数据是否有风险提醒输出格式是否稳定是否方便复制到项目里。多模型对比的意义不是找一个“永远正确”的模型而是通过不同输出发现盲点。比如一个模型更擅长代码一个模型更擅长补测试一个模型更擅长整理文档。八、风险边界哪些内容不要直接交给 AI在企业项目里下面几类内容要特别谨慎未脱敏的用户手机号、邮箱、身份证号真实订单金额、支付流水公司内部接口密钥、数据库连接串生产环境日志中的敏感信息未公开的业务规则和客户数据。更稳妥的做法是先脱敏再输入只提供字段结构和少量模拟数据不粘贴密钥、Token、连接信息关键规则由开发和业务共同确认AI 生成代码必须经过 Review 和测试。九、常见误区1. AI 生成的数据清洗代码能直接上线吗不建议。AI 适合生成草稿和补充思路但真实数据往往比样例复杂。上线前至少要经过样本验证、单元测试、异常数据抽查和代码 Review。2. 单一模型够不够普通脚本草稿通常够用如果涉及金额、用户数据、批量迁移建议用多模型交叉检查再由人工确认最终规则。3. Prompt 怎么写更稳定不要只说“帮我写脚本”。更好的写法是明确输入文件、输出文件、字段规则、异常处理、依赖库、测试要求和输出格式。4. 如何避免 AI 编造 API要求它只使用指定依赖比如“只用 pandas 和标准库”。生成代码后再通过本地运行、单元测试和官方文档确认。5. 技术文档能不能完全交给 AI可以让 AI 生成 README 初稿但字段含义、清洗规则、异常数据定义必须由项目成员确认。总结Gemini 3.5-flash 在 Python 数据清洗场景中很适合做“结构化助手”先拆规则再生成脚本草稿再补测试用例最后整理文档。比较稳妥的流程是先选一个高频、低风险的数据处理任务用清晰 Prompt 约束 AI 输出让 AI 生成可 Review 的代码而不是直接上线代码用单元测试、小样本、统计结果和人工抽样验证重要任务用多模型交叉验证但最终判断仍由开发者负责。把 AI 用进研发流程关键不是让它替代开发而是让它减少重复劳动、暴露遗漏点并帮助团队形成更可维护的工作方式。