影刀RPA进阶教程:Python代码指令做数据清洗——正则提取与字符串处理

采集到的数据经常是“价格:¥49.00元”“销量1234件已售”“1.2万赞”——带着各种前缀后缀和单位符号。直接用这些“脏数据”去分析或写入表格,Excel不认、计算报错、汇总全乱套。

影刀自带的“替换文本”“提取数字”能处理简单场景,但遇到复杂格式——价格里既有¥又有元、销量既有万又有千、手机号中间要脱敏——拖拽十几个指令还不如写一行正则来得快。

picture.image

我也是非技术出身,正则看着像天书,但后来发现常用的就三四个模式。今天把影刀RPA里数据清洗的三种方式全讲一遍——可视化指令清洗Python代码指令清洗Pandas批量清洗——按数据量大小选合适的方案。

一、什么时候该用Python清洗

picture.image

先搞清楚什么时候拖指令、什么时候写代码:

场景影刀自带指令Python方案

picture.image | 提取数字(如“¥49.00”→49.00) | 没有现成指令 | 正则一行搞定 | | 去除空格/特殊字符 | 可以用“替换文本”,但多个字符要多次 | 正则一个模式 | | 拆分字符串(如“苹果,香蕉”→列表) | 没有 | .split() | | 批量清洗列表(1000条数据) | 要写循环,慢 | 列表推导式一行 | | JSON解析 | 没有 | json.loads() |

picture.image

一句话:凡是涉及模式匹配、复杂字符串处理,就用Python。

二、方式一:可视化指令清洗(适合简单场景)

picture.image 数据量小、格式规律的时候,用影刀自带指令就行,不用写代码。

场景1:提取数字

指令位置:右侧指令面板搜索“提取文本信息”,选“提取自定义内容” → 提取方式选“正则表达式”。

picture.image

# 影刀RPA - 提取文本信息配置示例
# 场景:从“¥49.00”中提取49.00


![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/f8b0953468c1460f839a0503609db222~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1784010833&x-signature=KbvIawvwyZjATCTmiRlGoP0cZmA%3D)
# 指令:提取文本信息
# 文本内容:¥49.00
# 提取方式:提取自定义内容(正则表达式)
# 正则表达式:[\d.]+
# 保存结果至:价格变量

![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/a3fb0964590243f0a1c28fba5a787a96~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1784010833&x-signature=OmH647J2SZGmSYtc6ikeD0hX10U%3D)

场景2:替换文本

指令位置:右侧指令面板搜索“文本替换”。

# 影刀RPA - 文本替换示例
# 场景:把“21,940”变成“21940”

# 指令:文本替换
# 原文本:21,940
# 被替换内容:,
# 替换为:(空)
# 保存结果至:数字变量

踩坑提醒:提取“21,940”这种带千分位逗号的数字时,直接用正则[\d.]+只能提取到“21”,因为逗号把数字截断了。先用“文本替换”把逗号去掉,再提取数字。

三、方式二:Python代码指令清洗(推荐,最常用)

数据量中等(几百到几千条)、格式复杂的时候,用“执行Python代码”指令。

第一步:放置“执行Python代码”指令

  1. 右侧指令面板搜索“执行Python代码”,拖入画布
  2. 点亮右上角的Python图标(蓝色小蛇),否则代码写了也不执行
  3. 在代码框里写Python脚本
  4. 配置输入变量(把影刀变量传进Python)和输出变量(把Python结果传回影刀)

picture.image

核心语法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(数字类型,可以直接算总和)

picture.image

核心语法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)

影刀调用时:输出变量${清洗结果}是字典,再用“获取字典值”取numberunit

核心语法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环境里安装

  1. 找到影刀安装目录下的Python文件夹
  2. 打开命令提示符,进入该目录
  3. 运行:pip install pandas openpyxl

方法二:用本地已安装的完整Python(推荐)

  1. 从python.org下载Python 3.8+,安装时勾选“Add Python to PATH”
  2. 在命令提示符运行:pip install pandas openpyxl
  3. 影刀用“运行命令行”指令调用外部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_exceldrop_duplicatessort_values就够了

一句话总结数据清洗的核心就三件事——简单场景用可视化指令(提取文本、替换文本)复杂场景用Python代码指令(正则一行搞定)大数据量用Pandas外部脚本(速度快10倍)。把这三套方案备齐,采集回来的“脏数据”分分钟洗干净。

试试从把“¥49.00”变成49.00开始,写你的第一个Python清洗代码。


#影刀RPA #RPA自动化 #数据清洗 #Python #数据处理 #电商自动化

作者:林焱

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

0
0
0
0
评论
未登录
暂无评论