采集到的数据存进Excel后,经常需要做二次处理:去掉重复行、按价格排序、筛选出销量大于100的商品。
在影刀里用循环和条件判断也能做,但数据量一大就慢得要命,代码也乱。
Pandas是Python的数据分析库,处理表格数据又快又简洁。
虽然影刀内置的Python环境不支持直接安装Pandas,但你可以把数据导出成CSV,用外部Python脚本处理;或者把数据传给本地已安装Pandas的Python环境。
下面讲一种最实用的方法:影刀采集 → 保存CSV → 外部Python脚本(用Pandas处理) → 影刀读取结果。
一、为什么要在影刀里用Pandas?
影刀自带的Excel指令适合逐行读写,但不擅长:
- 按某一列排序(要自己写冒泡排序?太麻烦)
- 按条件筛选(循环判断,效率低)
- 去重(需要维护一个已采集列表)
- 多表合并(需要逐行对比)
Pandas一行代码就能搞定:
df_sorted = df.sort_values('价格', ascending=False) # 按价格降序排序

df_filtered = df[df['销量'] > 100] # 筛选销量>100
df_unique = df.drop_duplicates(subset=['标题']) # 按标题去重
影刀限制:影刀内置的Python环境是精简版,不支持
pip install pandas。你需要用本地安装的完整Python来跑Pandas脚本。
二、准备工作:安装本地Python和Pandas
如果你电脑上还没有Python环境,按下面步骤装:
操作步骤:
- 从官网下载Python 3.8+版本(推荐3.9)
- 安装时勾选“Add Python to PATH”
3. 打开命令提示符(cmd),输入:
pip install pandas openpyxl
- 等待安装完成
验证是否成功:
# 在cmd里输入 python 进入交互模式
import pandas as pd
print(pd.__version__)
# 不报错说明成功
影刀版本差异:影刀创业版/企业版支持“调用本地程序”指令,可以用它来执行外部Python脚本。社区版也可以,但需要配置路径。
三、实战案例1:对采集结果去重
场景: 影刀采集了1000条商品数据,存到products.xlsx,但因滚动加载可能有重复标题。
你需要按“标题”列去重,保留第一次出现的记录。
影刀流程:
- 采集完成后,保存Excel文件到固定路径
- 用“运行命令行”或“调用外部程序”执行Python脚本
- 脚本用Pandas读取Excel、去重、保存新文件
- 影刀读取去重后的文件继续后续操作
外部Python脚本(去重.py):
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')
在影刀里调用(用“运行命令行”指令):
# 指令:运行命令行
# 命令:python C:/采集数据/去重.py
# 等待完成后再读取 products_deduped.xlsx
影刀指令精确名称:“运行命令行”在“程序工具”分类下。可以执行任何系统命令。
四、实战案例2:按价格排序并取前10名
场景: 采集了商品和价格,想找出最贵的10个商品。
Pandas排序 + head() 一行搞定。
外部Python脚本(排序筛选.py):
import pandas as pd
df = pd.read_excel('products.xlsx')
# 确保价格列是数字类型(如果是文本带¥符号,先清洗)
df['价格'] = df['价格'].astype(str).str.replace('¥', '').str.replace('元', '').astype(float)

# 按价格降序排序
df_sorted = df.sort_values('价格', ascending=False)
# 取前10个
top10 = df_sorted.head(10)
# 保存
top10.to_excel('top10_products.xlsx', index=False)
进阶:按价格和销量综合排序
# 先按销量降序,再按价格降序
df_sorted = df.sort_values(['销量', '价格'], ascending=[False, False])
五、实战案例3:筛选出符合条件的行
场景: 只想保留销量大于1000且价格低于500元的商品。
脚本:
import pandas as pd
df = pd.read_excel('products.xlsx')
# 筛选条件
df_filtered = df[(df['销量'] > 1000) & (df['价格'] < 500)]
# 或者用query方法
df_filtered = df.query('销量 > 1000 and 价格 < 500')
df_filtered.to_excel('filtered_products.xlsx', index=False)
多条件组合:
# 销量在100-500之间,或者店铺名包含“旗舰店”
df_filtered = df[(df['销量'].between(100, 500)) | (df['店铺'].str.contains('旗舰店'))]
注意:用
&(与)和|(或)时,每个条件要加括号。
六、实战案例4:合并多个Excel文件
场景: 分多次采集,每次存一个Excel文件(如page1.xlsx、page2.xlsx、page3.xlsx)。
你想把所有文件合并成一个总表。
脚本:
import pandas as pd
import glob
# 获取所有page开头的xlsx文件
files = glob.glob('C:/采集数据/page*.xlsx')
# 创建一个空的DataFrame用于存放合并结果
df_all = pd.DataFrame()
for file in files:
df = pd.read_excel(file)
df_all = pd.concat([df_all, df], ignore_index=True)
# 去重(可选)
df_all = df_all.drop_duplicates(subset=['标题'])
# 保存
df_all.to_excel('merged_all.xlsx', index=False)
如果列名不一致: 先统一列名,或者用pd.concat的join='inner'只保留共有的列。
七、在影刀中封装成子流程(推荐)
你可以把Pandas处理封装成一个独立的子流程,输入原始Excel路径,输出处理后的Excel路径。
子流程设计:
- 输入参数:
【原始文件路径】、【处理类型】(去重/排序/筛选) - 输出参数:
【结果文件路径】
子流程内部:
- 根据
【处理类型】拼接要执行的Python脚本内容 - 将脚本内容写入临时
.py文件 - 调用“运行命令行”执行该脚本
- 返回结果文件路径
但更简单的方式:把常用处理写成固定的几个脚本,根据场景调用不同的脚本。
比如dedup.py、sort_by_price.py、filter_by_sales.py,直接调用。
影刀特有功能:可以用“写入文件”指令动态生成Python脚本内容,然后执行。这样不需要提前创建脚本文件。
八、常见问题速查
| 问题 | 解决方法 |
|---|---|
| 影刀里无法import pandas | 影刀内置Python不支持。必须用外部Python |
| 运行命令行报错“python不是内部命令” | 安装Python时没加PATH。重新安装勾选“Add to PATH”,或者用绝对路径(如C:\Python39\python.exe) |
| pandas读取Excel报错 | 安装openpyxl:pip install openpyxl |
| 读取时数字变成文本(如价格带¥符号) | 用df['价格'].astype(str).str.replace('¥','').astype(float)转换 |
| 处理大文件(几十万行)时内存不足 | 用chunksize参数分块读取;或者换用dask库 |
| 脚本执行完如何通知影刀继续 | 脚本执行结束后会继续运行影刀的下一条指令。可以用“等待文件存在”指令等待结果文件生成 |
| 不想装Python怎么办 | 用影刀自带的“数据去重”“表格排序”指令,但功能有限、速度慢 |
九、一个完整的影刀+Pandas工作流示例
# 影刀主流程
# 1. 采集数据,保存为 raw_data.xlsx
调用子流程(采集商品) # 内部最终保存Excel
# 2. 调用外部Python脚本用Pandas处理
【脚本路径】 = "C:/scripts/process.py"
【原始文件】 = "C:/data/raw_data.xlsx"
【输出文件】 = "C:/data/processed.xlsx"
# 用“写入文件”生成脚本(也可以提前写好)
写入文本文件(【脚本路径】, 内容="""
import pandas as pd
df = pd.read_excel(r'""" + 【原始文件】 + """')
df = df.drop_duplicates(subset=['标题'])
df = df.sort_values('价格', ascending=False)
df.to_excel(r'""" + 【输出文件】 + """', index=False)
""")
# 执行脚本
运行命令行(f"python {【脚本路径】}")
# 3. 等待处理完成
等待文件存在(【输出文件】, 超时时间30)
# 4. 读取处理后的数据,继续后续操作
打开Excel(【输出文件】) → 【最终数据】
推荐资源
- Pandas官方中文文档:pandas.pydata.org(有10分钟入门教程)
- 在线练习:kaggle.com 上的Pandas课程(免费)
- 影刀社区搜索“Pandas”,有用户分享的脚本模板
- 推荐IDE:VS Code + Python插件,写Pandas脚本有智能提示
建议:先在本地Jupyter Notebook里写好Pandas代码,测试无误后再封装到影刀的“运行命令行”中。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
