影刀RPA进阶教程:电商数据清洗实战——价格异常销量乱码的10个Python处理方案
采集完数据就万事大吉了吗?不是的。从网页抓下来的数据通常是"脏的"——影刀RPA采集到的价格可能带个"¥"符号,销量可能写的是"1.2万+",商品标题里可能夹了一堆空格和特殊符号。 
直接写进Excel没法用。数据清洗是采集流程的必修课。
为什么采集到的数据是脏的
| ¥ 299.00 | 价格带货币符号,无法做数学运算 |
| 1.2万+ | 销量用中文缩写,不是标准数字 |
| 超低价 | HTML实体字符没有解码 |
| 冬季保暖羽绒服 | 前后有空格,影响去重和匹配 |
| 19901-01-01 | 日期格式错误 |
| — | 缺失值用符号填充而非空 |
| ¥19.9~29.9 | 价格是区间,需要取最低或最高 |
10个实用清洗方法

方法1:清洗价格(去符号、提取数字)
拼多多店群自动化上架方案
import re
def clean_price(raw_price):
"""清洗价格字段"""
if not raw_price:
return None
# 去掉货币符号、空格
cleaned = re.sub(r'[¥¥$\\s,,]', '', str(raw_price))
# 处理价格区间,取最低价
if '~' in cleaned or '-' in cleaned:
parts = re.split(r'[~\\-~]', cleaned)

cleaned = min(parts, key=lambda x: float(x) if x else 999999)
# 提取数字
match = re.search(r'(\\d+\\.?\\d*)', cleaned)
return float(match.group(1)) if match else None
# 测试
print(clean_price('¥ 299.00')) # 299.0
print(clean_price('¥19.9~29.9')) # 19.9
print(clean_price('–')) # None
方法2:中文数量转数字
def cn_number_to_int(text):
"""把"1.2万+"转成12000"""
if not text:
return 0
text = str(text).strip().replace('+', '').replace(',', '')
if '万' in text:
num = float(text.replace('万', ''))
return int(num * 10000)
elif '千' in text:
num = float(text.replace('千', ''))
return int(num * 1000)
elif '亿' in text:
num = float(text.replace('亿', ''))
return int(num * 100000000)
try:
return int(float(text))
except ValueError:
return 0
# 测试
print(cn_number_to_int('1.2万+')) # 12000
print(cn_number_to_int('3500')) # 3500
print(cn_number_to_int('2.1亿')) # 210000000
方法3:清洗标题(去特殊字符)
import html
def clean_title(raw_title):
"""清洗商品标题"""
if not raw_title:
return ''
# HTML实体字符解码
title = html.unescape(raw_title)
# 去掉控制字符
title = re.sub(r'[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]', '', title)

# 去掉多余空格(包括全角空格)
title = re.sub(r'[\\u3000\\s]+', ' ', title).strip()
# 去掉促销词(可按需扩展)
promo_words = ['【限时特价】', '⚡', '🔥', '💥', '[爆款]', '(推荐)']
for word in promo_words:
title = title.replace(word, '')
return title.strip()
方法4:标准化日期
from datetime import datetime
def normalize_date(raw_date):
"""把各种日期格式统一成YYYY-MM-DD"""
if not raw_date:
return None
# 尝试各种常见格式
formats = [
'%Y-%m-%d', '%Y/%m/%d', '%Y.%m.%d',
'%m/%d/%Y', '%d/%m/%Y',
'%Y年%m月%d日',
'%Y%m%d'
]
for fmt in formats:
try:
return datetime.strptime(str(raw_date).strip(), fmt).strftime('%Y-%m-%d')
except ValueError:
continue
# 如果都不匹配,用正则提取
match = re.search(r'(\\d{4})[^\\d]?(\\d{1,2})[^\\d]?(\\d{1,2})', str(raw_date))
if match:
y, m, d = match.groups()
return f'{y}–{m.zfill(2)}–{d.zfill(2)}'
return None
方法5:去重(精确+模糊)
def remove_duplicates(df):
"""数据去重"""
# 精确去重(按标题+店铺名)
df = df.drop_duplicates(subset=['标题', '店铺名'], keep='first')
# 去掉标题相似度极高的(简单编辑距离)

# 如果不需要模糊去重,跳过这段
return df.reset_index(drop=True)
方法6:数据类型强制转换
def enforce_types(df):
"""强制转换数据类型"""
# 价格列:强制转float,失败的设为NaN
df['价格'] = pd.to_numeric(df['价格'], errors='coerce')
# 销量列:清洗后转int
df['销量'] = df['销量'].apply(cn_number_to_int)
# 日期列:统一格式
df['采集时间'] = pd.to_datetime(df['采集时间'], errors='coerce')
return df
方法7:过滤无效数据
def filter_invalid(df):
"""过滤明显无效的数据"""
# 价格过滤:去掉明显异常价格
df = df[(df['价格'] > 0) & (df['价格'] < 100000)]
# 标题过滤:去掉标题太短(可能是广告位)
df = df[df['标题'].str.len() >= 5]
[video(video–5PyZV1DE–1781497152442)(type–csdn)(url–https://live.csdn.net/v/embed/524993)(image–https://v–

blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title–TEMU店群如何管理运营?)]
# 去掉关键字段为空的行
df = df.dropna(subset=['标题', '价格'])
return df
方法8:批量清洗封装
def clean_ecommerce_data(raw_file, output_file):
"""一键清洗电商采集数据"""
df = pd.read_excel(raw_file)
# 依次应用清洗函数
df['价格'] = df['价格'].apply(clean_price)
df['销量'] = df['销量'].apply(cn_number_to_int)
df['标题'] = df['标题'].apply(clean_title)
df['采集日期'] = df['采集日期'].apply(normalize_date)
df = enforce_types(df)
df = filter_invalid(df)
df = remove_duplicates(df)
# 输出清洗结果
df.to_excel(output_file, index=False)
print(f'清洗完成:原始{len(pd.read_excel(raw_file))}行 → 清洗后{len(df)}行')
影刀RPA中的调用方式
在Python代码块中直接调用上面封装的函数:

# 完整流程:采集→清洗→写入
raw_data = [/* 影刀循环采集到的数据列表 */]
df = pd.DataFrame(raw_data)
# 清洗
df['价格'] = df['价格'].apply(clean_price)
df['销量'] = df['销量'].apply(cn_number_to_int)
df = filter_invalid(df)
# 写入
df.to_excel(r'C:\\数据\\清洗结果.xlsx', index=False)
最佳实践:把清洗函数单独保存到utils.py,影刀Python代码块里用import导入复用。

#影刀RPA #RPA自动化 #数据清洗 #Python数据处理 #电商数据
作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。 






