采集回来的数据,直接分析肯定出错。
价格带“¥”符号,销量带“万”字,标题里有换行符和空格,还有重复商品和空值。手动清洗几百条数据要一两个小时,用影刀RPA配合Pandas,几分钟就能搞定。
核心就五步:去重、空值处理、格式统一、异常值检测、分组聚合。
下面把完整流程拆开讲,都是电商采集后直接用的实战场景。
数据去重:按商品ID或链接去重
场景:采集了500条拼多多商品,其中有80条重复。
方法:用“执行Python代码”指令,调Pandas的drop_duplicates。
操作步骤:
- 在右侧指令面板搜索“执行Python代码”
- 拖入流程,点击“编辑代码”
3. 读取Excel,按商品ID去重,保留第一条
- 输出变量设为
clean_df,后续指令引用
# 影刀RPA中执行Python:按商品ID去重
import pandas as pd

# 读取采集数据
df = pd.read_excel('拼多多商品数据.xlsx')
# 按商品ID去重,保留第一条
df = df.drop_duplicates(subset=['商品ID'], keep='first')
# 如果商品ID不唯一,用商品链接去重

# df = df.drop_duplicates(subset=['商品链接'], keep='first')
return df
注意:社区版30分钟/天,Pandas处理很快,但调试时建议用创业版。创业版无限制。
空值处理:删除或填充缺失数据
场景:价格列有十几条空值,销量列也有缺失。
方法:用dropna删除空值行,或用fillna填充默认值。
操作步骤:
- 用
df.isnull().sum()查看每列空值数量 - 价格列空值:删除该行
- 销量列空值:填充0
- 标题列空值:填充“未知商品”
# 影刀RPA中执行Python:空值处理
import pandas as pd
df = pd.read_excel('拼多多商品数据.xlsx')
# 查看空值分布
print(df.isnull().sum())
# 删除价格为空的行
df = df.dropna(subset=['价格'])
# 销量空值填充0
df['销量'] = df['销量'].fillna(0)
# 标题空值填充“未知商品”
df['商品标题'] = df['商品标题'].fillna('未知商品')
return df
| 列名 | 空值处理方式 | 原因 |
|---|---|---|
| 价格 | 删除行 | 价格是核心字段 |
| 销量 | 填充0 | 可能确实无销量 |
| 标题 | 填充“未知” | 保留记录 |
| 链接 | 删除行 | 链接是唯一标识 |
格式统一:价格、销量、日期标准化
场景:拼多多价格是“¥29.9”,淘宝是“29.90”,小红书是“29.9元”。
方法:用正则提取数字,统一转成浮点数。
# 影刀RPA中执行Python:统一价格格式
import re
import pandas as pd
df = pd.read_excel('多平台商品数据.xlsx')
def clean_price(raw):
if pd.isna(raw):
return 0.0
nums = re.findall(r'[\d.]+', str(raw))
return float(nums[0]) if nums else 0.0
df['价格'] = df['价格'].apply(clean_price)
# 销量清洗:“1.2万”转成12000
def clean_sales(raw):
if pd.isna(raw):
return 0
nums = re.findall(r'[\d.]+', str(raw))
if not nums:
return 0
num = float(nums[0])
if '万' in str(raw):
num *= 10000
return int(num)
df['销量'] = df['销量'].apply(clean_sales)
return df
重点:清洗后价格保留两位小数,用round(num, 2)避免浮点误差。
异常值检测:识别不合理数据
场景:采集到价格“99999”或销量“-1”这种明显异常的数据。
方法:用Pandas的describe看分布,用条件筛选异常值。
# 影刀RPA中执行Python:异常值检测
import pandas as pd
df = pd.read_excel('拼多多商品数据.xlsx')
# 查看价格分布
print(df['价格'].describe())
# 筛选价格大于10000的异常值
outliers = df[df['价格'] > 10000]
# 筛选销量为负的异常值
negative_sales = df[df['销量'] < 0]
# 标记异常值,输出到单独文件
outliers.to_excel('异常值_价格过高.xlsx', index=False)
negative_sales.to_excel('异常值_销量为负.xlsx', index=False)
# 从主数据中删除异常值
df = df[(df['价格'] <= 10000) & (df['销量'] >= 0)]
return df
| 异常类型 | 判断条件 | 处理方式 |
|---|---|---|
| 价格过高 | > 10000 | 标记并删除 |
| 销量为负 | < 0 | 标记并删除 |
| 标题为空 | isnull | 填充“未知” |
| 日期格式错 | 正则不匹配 | 重新解析 |
分组聚合:按平台或店铺统计
场景:清洗完数据,想按平台统计平均价格和总销量。
方法:用groupby分组,配合agg聚合。
# 影刀RPA中执行Python:分组聚合
import pandas as pd
df = pd.read_excel('多平台商品数据_清洗后.xlsx')
# 按平台分组,计算平均价格、总销量、商品数量
result = df.groupby('平台').agg({
'价格': 'mean',
'销量': 'sum',
'商品标题': 'count'
}).rename(columns={
'价格': '平均价格',
'销量': '总销量',
'商品标题': '商品数量'
}).round(2)
# 按平均价格降序
result = result.sort_values('平均价格', ascending=False)
# 写入Excel
result.to_excel('平台统计结果.xlsx')
return result
避坑:分组后索引会变成“平台”,写入Excel前用reset_index()把索引变回列。
常见问题速查
| 问题 | 原因 | 解决 |
|---|---|---|
| 去重后数据变少 | 有重复ID | 正常,保留第一条 |
| 空值删除太多 | 核心列空值多 | 填充而非删除 |
| 价格清洗为0 | 正则匹配失败 | 检查原始格式 |
| 分组后索引乱 | 没reset_index | 加reset_index |
| 社区版额度不够 | 30分钟/天 | 创业版无限制 |
Q:魔法指令能生成数据清洗代码吗?
A:影刀3.0的魔法指令可以对话式生成Pandas片段,但清洗逻辑要自己检查。
Q:数据清洗后怎么自动发送?
A:用“发送邮件”指令,附件带上清洗后的Excel,收件人从配置表读取。
Q:清洗规则能复用吗?
A:可以。把清洗逻辑封装成子流程,输入原始数据,输出清洗后数据。
推荐资源
- 影刀RPA官方学院“Python协同”专题课,免费
- 影刀社区搜索“数据清洗”,有Pandas处理模板
- Pandas官方文档“drop_duplicates”和“groupby”章节,有完整示例
#影刀RPA #RPA自动化 #数据清洗 #电商采集 #Pandas #数据去重
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
