TypechoJoeTheme

至尊技术网

登录
用户名
密码

用Pandas和正则表达式驯服混乱的CSV文件头

2026-01-03
/
0 评论
/
1 阅读
/
正在检测是否收录...
01/03

正文:

在数据分析师的日常工作中,经常会遇到这样的场景:业务部门发来的CSV文件,文件头像是被随意拼接的乐高积木——同一列可能包含"日期_2023"、"Date(Q2)"等变体,甚至混杂着说明文字。这种非标准化数据往往需要耗费大量手工处理时间。

最近我接手了一个电商促销数据的分析项目,原始数据文件头堪称"灾难现场":

Product ID (Note: required field),Price[USD];2023,库存状态_最新
"销售区域(省/市)","促销周期(days)",备注信息

面对这种"行为艺术"般的文件头,传统方法需要编写复杂的预处理脚本。但通过Pandas结合正则表达式,我们可以构建更优雅的解决方案。

首先导入必要的库并观察原始数据:import pandas as pd
import re

rawdf = pd.readcsv('promotiondata.csv', header=None, nrows=3) print(rawdf.iloc[0:3, 0:5])

关键步骤是设计正则表达式模板来提取有效字段名。例如处理包含单位说明的字段:def cleanheader(header): # 提取中英文核心字段名 pattern = r'([\u4e00-\u9fa5]+)|([a-zA-Z]\w*)' matches = re.findall(pattern, header) return ''.join([m[0] or m[1] for m in matches if any(m)])

headers = [cleanheader(str(col)) for col in rawdf.iloc[0]]
cleandf = pd.readcsv('promotiondata.csv', header=1) cleandf.columns = headers

这个方案成功将混乱的原始文件头转换为标准格式:
1. "Price[USD];2023" → "PriceUSD" 2. "库存状态最新" → "库存状态"
3. "促销周期(days)" → "促销周期"

对于更复杂的情况,比如包含多层说明的字段,可以采用分步处理策略:

def parsenestedheader(header):
    # 先移除注释内容
    header = re.sub(r'([^)]*)', '', header)
    # 再处理特殊字符
    return re.sub(r'[^\w\u4e00-\u9fa5]', '_', header).strip('_')

实际应用中还需要考虑异常情况处理。我们添加了字段验证逻辑:validheaders = ['productid', 'price', 'region']
cleaned_headers = []

for h in headers:
hlower = h.lower() for vh in validheaders:
if vh in hlower: cleanedheaders.append(vh)
break
else:
cleanedheaders.append('unknown' + str(len(cleaned_headers)))

这种方法的优势在于:
- 保持代码可读性的同时处理复杂模式
- 通过正则表达式组捕获实现灵活匹配
- 保留中文字段的处理能力
- 对数据源的适应性更强

在完成文件头解析后,后续的数据清洗工作变得水到渠成。我们可以轻松地:
1. 标准化日期格式
2. 统一货币单位
3. 处理缺失值

正则表达式Pandas数据清洗CSV解析非结构化数据
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/42515/(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 强强强
    2025-04-07
  2. jesse
    2025-01-16
  3. sowxkkxwwk
    2024-11-20
  4. zpzscldkea
    2024-11-20
  5. bruvoaaiju
    2024-11-14

标签云