欢迎光临
我们一直在努力

影刀RPA进阶教程_电商数据清洗实战价格异常销量乱码的10个Python处理方案

影刀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)
![在这里插入图片描述](https://iblog.csdnimg.cn/direct/ffb3cd7c467a4b47859a4c44ba36b5f7.png#pic_center)

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)
![在这里插入图片描述](https://iblog.csdnimg.cn/direct/3e873c402c7a4716bad49438ff356adb.png#pic_center)

# 去掉多余空格(包括全角空格)
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')

# 去掉标题相似度极高的(简单编辑距离)
![在这里插入图片描述](https://iblog.csdnimg.cn/direct/af3ccb0c69ab499e894672c3ed74c333.png#pic_center)

# 如果不需要模糊去重,跳过这段

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(video5PyZV1DE1781497152442)(typecsdn)(urlhttps://live.csdn.net/v/embed/524993)(imagehttps://v
![在这里插入图片描述](https://iblog.csdnimg.cn/direct/c67ae4002b0b47fcaadc060cf00c9ef9.png#pic_center)
blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(titleTEMU店群如何管理运营?)]

# 去掉关键字段为空的行
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学习手册》系列文章之一,内容源于实操经验的整理与分享。 在这里插入图片描述

赞(0)
未经允许不得转载:171主机测评 » 影刀RPA进阶教程_电商数据清洗实战价格异常销量乱码的10个Python处理方案
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址