采集到的Excel数据动辄上千行,要用影刀原生指令做筛选排序,得写一大堆循环和判断。 用Python的Pandas库,几行代码搞定数据清洗,再传回影刀写入表格。
核心方法:在“Python代码”指令中导入pandas,对数据做筛选、排序、合并、去重后,输出新表格。
一、为什么要在影刀里用Pandas?
| 操作 | 影刀原生指令 | Pandas代码量 |
|---|
| 筛选价格>50的行 | 循环+判断+新列表 | 1行 |
| 按销量排序 | 循环+排序算法 | 1行 |
| 根据商品名去重 | 循环+记录已出现 | 1行 |
| 两张表合并 | 复杂循环拼接 | 1行 |
| 分组统计平均值 | 嵌套循环 | 1行 |
前提: 你需要先安装pandas库(在影刀Python环境里)。社区版用户第一次使用时可能需安装,创业版/企业版一般已预装。
二、Pandas基础:影刀中的安装与使用
安装pandas(如报错“No module named pandas”)
- 打开影刀安装目录下的Python(或系统Python)
- 执行
pip install pandas openpyxl - 或者直接在影刀的Python代码指令里写
import subprocess; subprocess.run(['pip','install','pandas'])(不推荐,易超时)
社区版注意: 首次安装需要额外时间,建议在本地调试环境先装好。
基础模板
# Python代码指令:Pandas处理数据

# 输入参数:data(影刀传入的二维列表,如从Excel读取的区域数据)
# 输出参数:output_处理后数据(二维列表)
import pandas as pd

# 影刀传入的列表转DataFrame
df = pd.DataFrame(data[1:], columns=data[0]) # data[0]是表头,data[1:]是数据行
# 在这里写处理逻辑
# 例如:筛选价格>50的行
df_filtered = df[df['价格'] > 50]
# 转回二维列表(供影刀写入Excel)
output_处理后数据 = [df_filtered.columns.tolist()] + df_filtered.values.tolist()
注意: 影刀从Excel读到的区域数据格式是 [[表头行], [数据行1], [数据行2]...],第一行是表头。
三、实战1:筛选(价格>50且销量>1000)
采集了1000条商品数据,只要价格高于50且销量大于1000的商品。
# Python代码指令:筛选数据
# 输入:原始数据(二维列表,第一行是表头)
# 输出:output_筛选后数据
import pandas as pd
# 构建DataFrame
df = pd.DataFrame(原始数据[1:], columns=原始数据[0])

# 筛选条件:价格>50 且 销量>1000
# 假设表头有“价格”和“销量”列
df_result = df[(df['价格'] > 50) & (df['销量'] > 1000)]
# 转回列表
output_筛选后数据 = [df_result.columns.tolist()] + df_result.values.tolist()
影刀调用后,用“写入行数据到表格”把 {筛选后数据} 写入新Excel即可。
四、实战2:排序(按销量降序)
# Python代码指令:按销量排序
import pandas as pd
df = pd.DataFrame(原始数据[1:], columns=原始数据[0])
# 按“销量”列降序排序(ascending=False)
df_sorted = df.sort_values(by='销量', ascending=False)
output_排序后数据 = [df_sorted.columns.tolist()] + df_sorted.values.tolist()
多列排序: df.sort_values(by=['销量', '价格'], ascending=[False, True])
五、实战3:去重(根据商品标题去重,保留第一个)
同一个商品可能被采集多次,需要去重。
# Python代码指令:根据“商品标题”去重
import pandas as pd
df = pd.DataFrame(原始数据[1:], columns=原始数据[0])
# 根据“商品标题”列去重,保留第一次出现的行
df_unique = df.drop_duplicates(subset=['商品标题'], keep='first')
output_去重后数据 = [df_unique.columns.tolist()] + df_unique.values.tolist()
参数说明:
keep='first'保留第一个keep='last'保留最后一个keep=False删除所有重复项
六、实战4:合并两张表(类似Excel VLOOKUP)
有两张表:商品表(商品ID、标题)、价格表(商品ID、价格)。合并成一张完整表。
# Python代码指令:合并两张表
import pandas as pd
# 假设从两张Excel分别读取,存入“商品表”和“价格表”
df_product = pd.DataFrame(商品表[1:], columns=商品表[0])
df_price = pd.DataFrame(价格表[1:], columns=价格表[0])
# 按“商品ID”左连接
df_merged = pd.merge(df_product, df_price, on='商品ID', how='left')
output_合并后数据 = [df_merged.columns.tolist()] + df_merged.values.tolist()
连接方式:
how='inner'只保留两表都有的how='left'保留左表所有how='right'保留右表所有how='outer'保留所有
七、实战5:分组统计(按店铺计算销量总和)
# Python代码指令:按店铺分组统计销量
import pandas as pd
df = pd.DataFrame(原始数据[1:], columns=原始数据[0])
# 按“店铺名”分组,计算“销量”总和和“价格”平均值
df_group = df.groupby('店铺名').agg({
'销量': 'sum',
'价格': 'mean'
}).reset_index()
output_统计结果 = [df_group.columns.tolist()] + df_group.values.tolist()
其他聚合函数: 'count', 'min', 'max', 'std'
八、实战6:添加计算列(利润率 = (价格-成本)/成本)
# Python代码指令:添加计算列
import pandas as pd
df = pd.DataFrame(原始数据[1:], columns=原始数据[0])
# 假设有“价格”和“成本”列,计算利润率
df['利润率'] = (df['价格'] - df['成本']) / df['成本']
# 格式化为百分比(可选)
df['利润率'] = df['利润率'].apply(lambda x: f"{x:.1%}")
output_带计算列数据 = [df.columns.tolist()] + df.values.tolist()
九、影刀+Pandas完整流程示例
# 影刀主流程
# 1. 读取原始数据
Excel Workbook打开:文件"原始数据.xlsx" → 工作簿
读取区域数据到列表:起始"A1",存入"原始数据"
Excel Workbook关闭
# 2. Python代码指令:Pandas清洗
# 输入:原始数据(二维列表)
# 输出:清洗后数据
import pandas as pd
df = pd.DataFrame(原始数据[1:], columns=原始数据[0])
# 删除空行
df = df.dropna(subset=['商品标题'])
# 筛选价格在10-100之间的
df = df[(df['价格'] >= 10) & (df['价格'] <= 100)]
# 按销量降序
df = df.sort_values(by='销量', ascending=False)
# 去重(相同标题只留一个)
df = df.drop_duplicates(subset=['商品标题'])
# 添加排名列
df['排名'] = range(1, len(df)+1)
output_清洗后数据 = [df.columns.tolist()] + df.values.tolist()
# 3. 写入结果
Excel Workbook打开:文件"清洗结果.xlsx",自动创建 → 结果工作簿
# 注意:清洗后数据第一行是表头,需要逐行写入
循环列表:清洗后数据,循环变量=行
写入行数据到表格:行数据={行}
Excel Workbook保存并关闭
十、Pandas在影刀中的限制与注意事项
| 限制 | 说明 | 解决办法 |
|---|---|---|
| 大数据量内存 | 10万行以上可能卡顿 | 分批处理或用数据库 |
| 安装问题 | 部分环境未预装pandas | 提前用pip安装,或联系管理员 |
| 中文字段名 | 表头含中文没问题 | 直接用中文列名,如df['价格'] |
| 数据类型 | 影刀传入的数字可能是字符串 | 先用pd.to_numeric()转换 |
| 运行时长 | Pandas处理耗时较长 | 社区版注意时长,先在小数据集测试 |
常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
ModuleNotFoundError: No module named 'pandas' | 未安装pandas | 运行 pip install pandas |
| 列名取不到 | 表头有空格或特殊字符 | 打印 df.columns 查看实际列名 |
| 数字列排序变成字符串排序 | 列数据类型是object | df['价格'] = pd.to_numeric(df['价格']) |
| 输出后Excel格式错乱 | 转列表时索引未重置 | 加 df.reset_index(drop=True) |
| 内存不足报错 | 数据量太大 | 用 chunksize 分块读取 |
推荐资源
- Pandas官方文档:pandas.pydata.org(有中文版)
- 影刀官方帮助中心:搜索“Pandas”有示例流程下载
- 我的经验:学会Pandas的这5个操作(筛选、排序、去重、合并、分组),能解决90%的数据清洗需求,不用学太深
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
