Pandas实战:巧解混合文本与数字列的清洗难题

2025年12月15日/ 浏览 18

正文:

在日常数据分析中,我们常会遇到这样的数据列:”营收235万元”、”同比增长12.5%”、”库存量3,245件”。这类混合了文本和数字的数据,往往让新手数据分析师手足无措。今天我们就用Pandas拆解这个”硬骨头”。

首先看典型场景——电商订单数据中的价格列:


import pandas as pd
raw_data = {
    '商品': ['手机', '笔记本', '耳机'],
    '价格': ['¥3999', '优惠价6899', '活动价¥299']
}
df = pd.DataFrame(raw_data)

方案一:str.extract()正则提取法


# 提取价格数字(含小数和千分位分隔符)
df['价格'] = df['价格'].str.extract(r'(\d+[,.]?\d*)').astype(float)

但现实往往更复杂。比如处理带有单位的测量数据:


measures = ["15.6cm", "20mm", "1.2m"]
s = pd.Series(measures)

# 同时提取数值和单位
extracted = s.str.extract(r'(\d+\.?\d*)([cm]?m)')

进阶技巧:使用pd.eval()处理计算表达式


calc_col = ["3*1500", "2000+500", "9800/2"]
df['计算结果'] = pd.eval(df['计算列'])

当遇到多语言混合时,需注意编码问题:


multi_lang = ["USD$99", "€85", "JPY¥12000"]
df['货币'] = df['金额'].str.extract(r'([$€¥£])')
df['金额'] = df['金额'].str.extract(r'(\d+)').astype(float)

最后分享一个处理百分比的高效方法:


percent_col = ["增长15%", "下降3.2%", "持平0%"]
df['变化率'] = df['百分比列'].str.extract(r'(\d+\.?\d*)').astype(float)/100

实际项目中,建议先抽样检查数据模式,再编写处理逻辑。对于超大数据集,可以考虑使用Dask替代Pandas进行分布式处理。记住,好的数据清洗能为后续分析节省80%的时间成本。

picture loss