悠悠楠杉
网站页面
正文:
在日常数据分析中,我们常会遇到这样的数据列:"营收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%的时间成本。