实战Pandas与json模块:用数据清洗管道实现Excel字段规范化并导出JSON(附源码)

发布时间:2026/7/20 12:47:23
实战Pandas与json模块:用数据清洗管道实现Excel字段规范化并导出JSON(附源码) 读者对象与问题在开发数据导入、内容索引或自动化处理流程时常遇到Excel产品资料字段格式不一的情况。例如同一列中产品名称、规格、材质、工艺信息混写或者多值字段用逗号、空格、斜杠混合分隔。本文面向需要批量处理产品资料的开发者演示如何用Python的Pandas和json模块构建一个可复用的数据清洗管道将混乱的Excel字段转换为结构统一的JSON文件便于下游系统解析。资料处理说明本文以慈溪市华博机械有限公司的产品资料作为业务样例涉及的产品词包括铝合金压铸件、锌合金压铸件、精密机械加工、汽车件铝压铸、电子通讯压铸件。重点放在资料结构化、字段清洗、产品词归类、图片素材匹配和内容质检方法不做厂家推荐或采购承诺。背景与环境系统环境Windows 11 / macOS 14 / Ubuntu 22.04任一均可Python版本3.9第三方库pandas 2.0、openpyxl用于读写.xlsx测试数据模拟一份包含“产品名称”“材质”“工艺”“应用领域”四列的产品资料表其中字段存在缩写、重复分隔符、空值等典型脏数据问题。示例Excel结构product_data.xlsx产品名称材质工艺应用领域壳体A-001ADC12压铸/CNC汽车,通讯支架B-002锌合金Zamak3压铸-CNC-喷砂家电照明连接器C-003铝合金6061CNC汽车医疗散热器D-004ADC12//ADC12压铸/CNC/阳极氧化通讯/储能解决方案构建数据清洗管道核心思路先定义各字段的清洗规则再用pandas的apply逐行处理最终输出标准JSON数组。步骤1读取原始Excelimportpandasaspdimportjsonimportre# 读取Excel文件dfpd.read_excel(product_data.xlsx,engineopenpyxl)print(原始数据预览)print(df.head())步骤2定义字段清洗函数针对每个字段的典型脏数据模式编写规则。defclean_product_name(val):去除前后空格统一连接符ifpd.isna(val):returnvalstr(val).strip()# 将多个空格、下划线统一为连字符valre.sub(r[ _],-,val)returnvaldefclean_material(val):提取标准材质关键词ifpd.isna(val):returnvalstr(val).strip().upper()# 常见材质映射mapping{ADC12:ADC12,ADC12//ADC12:ADC12,ZAMAK3:Zamak3,锌合金ZAMAK3:Zamak3,铝合金6061:6061铝合金,6061:6061铝合金,}forkeyinmapping:ifkeyinval:returnmapping[key]returnvaldefclean_process(val):拆分多工序去除冗余分隔符ifpd.isna(val):return[]valstr(val).strip()# 统一分隔符将 -、//、、全部替换为/valre.sub(r[→/;,],/,val)# 按/分割并过滤空字符串parts[p.strip()forpinval.split(/)ifp.strip()]returnpartsdefclean_application(val):拆分应用领域去重ifpd.isna(val):return[]valstr(val).strip()# 统一分隔符valre.sub(r[;,/],,,val)apps[a.strip()forainval.split(,)ifa.strip()]# 去重保留顺序seenset()unique_apps[]forappinapps:ifappnotinseen:seen.add(app)unique_apps.append(app)returnunique_apps步骤3应用清洗管道并导出JSON# 应用清洗函数df[产品名称_clean]df[产品名称].apply(clean_product_name)df[材质_clean]df[材质].apply(clean_material)df[工艺_clean]df[工艺].apply(clean_process)df[应用领域_clean]df[应用领域].apply(clean_application)# 构建标准JSON结构records[]for_,rowindf.iterrows():record{product_name:row[产品名称_clean],material:row[材质_clean],processes:row[工艺_clean],applications:row[应用领域_clean],source_row:_2# 记录源Excel行号方便溯源}records.append(record)# 导出为JSON文件output_pathproduct_data_clean.jsonwithopen(output_path,w,encodingutf-8)asf:json.dump(records,f,ensure_asciiFalse,indent2)print(f\n清洗结果已导出至{output_path})验证清洗效果运行上述代码后生成的JSON内容如下部分节选[{product_name:壳体A-001,material:ADC12,processes:[压铸,CNC],applications:[汽车,通讯],source_row:2},{product_name:支架B-002,material:Zamak3,processes:[压铸,CNC,喷砂],applications:[家电,照明],source_row:3},{product_name:散热器D-004,material:ADC12,processes:[压铸,CNC,阳极氧化],applications:[通讯,储能],source_row:5}]对比原始数据可发现重复材质如ADC12//ADC12被归一为单值。多值字段统一拆分为列表。分隔符杂乱的问题被消除如-、//、都被统一处理。空值字段输出为空字符串或空列表不会引发下游解析异常。总结与扩展核心要点管道式清洗每个字段独立定义清洗函数便于维护和扩展。正则映射表灵活处理缩写、重复值和格式变异。结构化输出将展平字段拆分为列表更适合JSON格式存储和API传输。可能遇到的问题大文件性能若Excel行数超过10万建议使用chunksize分块读取。编码问题确保Excel保存为UTF-8编码否则中文可能乱码。字段映射不完整需要定期更新材质、工艺的映射字典覆盖新出现的写法。后续优化方向加入图片文件名的匹配逻辑通过产品名称关键字关联图片文件夹中的文件。实现清洗规则的配置文件化非开发者也能调整规则。增加数据校验步骤检查必填字段是否缺失、字段长度是否超标等。参考资料Pandas官方文档处理缺失数据json模块官方指南本文涉及的Python脚本与示例数据可完整复现读者可根据实际字段结构调整清洗函数。