采集到的数据经常是“价格:¥49.00元”“销量1234件已售”“1.2万赞”——带着各种前缀后缀和单位符号。直接用这些“脏数据”去分析或写入表格,Excel不认、计算报错、汇总全乱套。
影刀自带的“替换文本”“提取数字”能处理简单场景,但遇到复杂格式——价格里既有¥又有元、销量既有万又有千、手机号中间要脱敏——拖拽十几个指令还不如写一行正则来得快。
我也是非技术出身,正则看着像天书,但后来发现常用的就三四个模式。今天把影刀RPA里数据清洗的三种方式全讲一遍——可视化指令清洗、Python代码指令清洗、Pandas批量清洗——按数据量大小选合适的方案。
一、什么时候该用Python清洗
先搞清楚什么时候拖指令、什么时候写代码:
| 场景 | 影刀自带指令 | Python方案 |
|---|
| 提取数字(如“¥49.00”→49.00) | 没有现成指令 | 正则一行搞定 |
| 去除空格/特殊字符 | 可以用“替换文本”,但多个字符要多次 | 正则一个模式 |
| 拆分字符串(如“苹果,香蕉”→列表) | 没有 |
.split() |
| 批量清洗列表(1000条数据) | 要写循环,慢 | 列表推导式一行 |
| JSON解析 | 没有 | json.loads() |
一句话:凡是涉及模式匹配、复杂字符串处理,就用Python。
二、方式一:可视化指令清洗(适合简单场景)
数据量小、格式规律的时候,用影刀自带指令就行,不用写代码。
场景1:提取数字
指令位置:右侧指令面板搜索“提取文本信息”,选“提取自定义内容” → 提取方式选“正则表达式”。
# 影刀RPA - 提取文本信息配置示例
# 场景:从“¥49.00”中提取49.00

# 指令:提取文本信息
# 文本内容:¥49.00
# 提取方式:提取自定义内容(正则表达式)
# 正则表达式:[\d.]+
# 保存结果至:价格变量

场景2:替换文本
指令位置:右侧指令面板搜索“文本替换”。
# 影刀RPA - 文本替换示例
# 场景:把“21,940”变成“21940”
# 指令:文本替换
# 原文本:21,940
# 被替换内容:,
# 替换为:(空)
# 保存结果至:数字变量
踩坑提醒:提取“21,940”这种带千分位逗号的数字时,直接用正则[\d.]+只能提取到“21”,因为逗号把数字截断了。先用“文本替换”把逗号去掉,再提取数字。
三、方式二:Python代码指令清洗(推荐,最常用)
数据量中等(几百到几千条)、格式复杂的时候,用“执行Python代码”指令。
第一步:放置“执行Python代码”指令
- 右侧指令面板搜索“执行Python代码”,拖入画布
- 点亮右上角的Python图标(蓝色小蛇),否则代码写了也不执行
- 在代码框里写Python脚本
- 配置输入变量(把影刀变量传进Python)和输出变量(把Python结果传回影刀)
核心语法1:正则提取数字
场景:采集到的价格是“¥49.00”,要提取49.00。
# 影刀RPA - Python代码指令:提取价格数字
# 输入变量:raw_price(字符串),从影刀传入
# 输出变量:clean_price(数字)
import re
# 提取数字和小数点
match = re.search(r'[\d.]+', raw_price)
if match:
clean_price = float(match.group()) # 转成数字
else:
clean_price = 0
# print输出,影刀会捕获
print(clean_price)
影刀里的配置:
- 输入变量:
{"raw_price": ${原始价格}} - 输出变量:
${清洗后价格}
效果:“¥49.00” → 49.00(数字类型,可以直接算总和)
核心语法2:提取数字+单位
场景:销量“1234件已售”,要提取1234和单位“件”。
# 影刀RPA - Python代码指令:提取数字和单位
# 输入变量:raw_sales(字符串)
# 输出变量:result(字典)
import re
match = re.search(r'(\d+)([^0-9]+)', raw_sales)
if match:
number = int(match.group(1)) # 1234
unit = match.group(2).strip() # "件"
result = {"number": number, "unit": unit}
else:
result = {"number": 0, "unit": ""}
print(result)
影刀调用时:输出变量${清洗结果}是字典,再用“获取字典值”取number和unit。
核心语法3:去除所有非数字字符
场景:手机号采集成了“手机:138-1234-5678”,要去掉非数字。
# 影刀RPA - Python代码指令:提取纯数字
# 输入变量:raw_phone(字符串)
# 输出变量:clean_phone(字符串)
import re
clean_phone = re.sub(r'\D', '', raw_phone)
# \D 匹配所有非数字字符,包括汉字、标点、空格
print(clean_phone)
效果:“手机:138-1234-5678” → “13812345678”
核心语法4:拆分带分隔符的字符串
场景:采集到的类目是“电子产品>手机>5G手机”,要拆分成三个独立字段。
# 影刀RPA - Python代码指令:拆分字符串
# 输入变量:raw_category(字符串)
# 输出变量:category_list(列表)
category_list = raw_category.split('>')
# 结果:["电子产品", "手机", "5G手机"]
print(category_list)
核心语法5:处理“万”单位(电商最常用)
场景:拼多多销量“10万+件”、抖音点赞“1.2万”——要把“万”转成数字。
# 影刀RPA - Python代码指令:处理“万”单位
# 输入变量:raw_number(字符串,如 "1.2万")
# 输出变量:clean_number(数字)
import re
# 提取数字
match = re.search(r'[\d.]+', raw_number)
if not match:
print(0)
return
value = float(match.group())
# 判断是否有"万"
if '万' in raw_number:
value = value * 10000
# 如果有"+"号,去掉
if '+' in raw_number:
pass # 已经提取了数字,不受影响
print(int(value))
效果:“1.2万” → 12000,“10万+” → 100000,“5200” → 5200
四、方式三:Pandas批量清洗(适合大数据量)
数据量上了几千上万行,用Python代码指令逐条处理也慢。这时候用Pandas——把整个表格读进来,一行代码搞定所有行的清洗。
准备工作:安装Pandas
影刀社区版内置Python环境默认没有Pandas,需要先安装。
方法一:在影刀安装目录下的Python环境里安装
- 找到影刀安装目录下的Python文件夹
- 打开命令提示符,进入该目录
- 运行:
pip install pandas openpyxl
方法二:用本地已安装的完整Python(推荐)
- 从python.org下载Python 3.8+,安装时勾选“Add Python to PATH”
- 在命令提示符运行:
pip install pandas openpyxl - 影刀用“运行命令行”指令调用外部Python脚本
实战案例1:对采集结果去重
场景:影刀采集了1000条商品数据,存到products.xlsx,但因滚动加载可能有重复标题。按“标题”列去重,保留第一次出现的记录。
外部Python脚本(去重.py) :
# 外部Python脚本:用Pandas去重
# 输入:影刀生成的Excel文件
# 输出:去重后的Excel文件
import pandas as pd
# 读取影刀生成的Excel
df = pd.read_excel('C:/采集数据/products.xlsx', engine='openpyxl')
# 按标题列去重,保留第一条
df_unique = df.drop_duplicates(subset=['标题'], keep='first')
print(f"去重前:{len(df)}行,去重后:{len(df_unique)}行")
# 保存到新文件
df_unique.to_excel('C:/采集数据/products_deduped.xlsx', index=False, engine='openpyxl')
在影刀里调用:用“运行命令行”指令
# 影刀RPA - 运行命令行调用Pandas脚本
# 命令:python C:/采集数据/去重.py
实战案例2:筛选+排序
场景:从1000条商品中筛选出价格大于100且销量大于500的,按销量降序排列。
# 外部Python脚本:筛选+排序
import pandas as pd
df = pd.read_excel('C:/采集数据/products.xlsx', engine='openpyxl')
# 筛选:价格>100 且 销量>500
df_filtered = df[(df['价格'] > 100) & (df['销量'] > 500)]
# 按销量降序排列
df_sorted = df_filtered.sort_values('销量', ascending=False)
# 重置索引(从0开始)
df_sorted = df_sorted.reset_index(drop=True)
# 保存
df_sorted.to_excel('C:/采集数据/products_filtered.xlsx', index=False, engine='openpyxl')
实战案例3:清洗价格列(批量处理“万”单位)
场景:价格列里有“¥29.90”“29.90元”“29.9”三种格式,要统一成数字。
# 外部Python脚本:批量清洗价格列
import pandas as pd
import re
def clean_price(text):
"""清洗单个价格:提取数字"""
if pd.isna(text):
return 0.0
match = re.search(r'[\d.]+', str(text))
return float(match.group()) if match else 0.0
df = pd.read_excel('C:/采集数据/products.xlsx', engine='openpyxl')
# 对价格列应用清洗函数
df['价格_清洗后'] = df['原始价格'].apply(clean_price)
# 保存
df.to_excel('C:/采集数据/products_cleaned.xlsx', index=False, engine='openpyxl')
Pandas vs 逐条处理的速度对比:处理10000条数据,逐条循环约30-60秒,Pandas约1-2秒。
五、三种清洗方式怎么选
| 数据量 | 推荐方式 | 原因 |
|---|---|---|
| < 100条 | 可视化指令 | 不用写代码,拖拽就行 |
| 100-5000条 | Python代码指令 | 灵活,直接在影刀里跑 |
| > 5000条 | Pandas外部脚本 | 速度快10倍以上 |
六、常见问题与易错速查
| 错误现象 | 可能原因 | 修复方法 |
|---|---|---|
| Python代码没执行 | Python图标没点亮 | 点击指令右上角的蓝色小蛇图标 |
| 提取“21,940”只拿到“21” | 逗号截断了数字 | 先用“文本替换”去掉逗号 |
| 提取“1.2万”只拿到“1.2” | 没处理“万”单位 | 判断是否有“万”,乘以10000 |
| Pandas报错“No module named” | 没安装pandas | 用pip安装pandas和openpyxl |
| 读取Excel报错 | 文件被占用 | 关闭手动打开的Excel窗口 |
| 正则表达式匹配不到 | 模式写错了 | 用在线正则测试工具验证 |
| 输出变量拿不到值 | 忘记写print() | Python代码最后用print()输出结果 |
| None值参与计算报错 | 数据为空 | 先用if pd.isna()或if x is None判断 |
七、5个必会的正则模式
| 需求 | 正则表达式 | 说明 |
|---|---|---|
| 提取数字(含小数) | [\d.]+ | 匹配一个或多个数字或小数点 |
| 提取纯数字(不含小数) | \d+ | 匹配一个或多个数字 |
| 去除所有非数字 | \D | 替换为空 |
| 提取数字+后面的文字 | (\d+)([^0-9]+) | 分组提取数字和单位 |
| 提取中文 | [\u4e00-\u9fa5]+ | 匹配中文字符 |
八、推荐资源
- 影刀官方帮助中心:搜索“执行Python代码”,有完整的指令说明和参数配置
- 影刀开发者社区:搜索“数据清洗”“正则”,有大量实战问答
- 在线正则测试工具:搜索“regex101”,粘贴正则和文本实时验证
- Pandas官方文档:10分钟入门,学会
read_excel、drop_duplicates、sort_values就够了
一句话总结:数据清洗的核心就三件事——简单场景用可视化指令(提取文本、替换文本)、复杂场景用Python代码指令(正则一行搞定)、大数据量用Pandas外部脚本(速度快10倍)。把这三套方案备齐,采集回来的“脏数据”分分钟洗干净。
试试从把“¥49.00”变成49.00开始,写你的第一个Python清洗代码。
#影刀RPA #RPA自动化 #数据清洗 #Python #数据处理 #电商自动化
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
