当前位置: 首页 > news >正文

影刀RPA Excel数据清洗实战:空行、重复、乱码、格式混乱的处理

影刀RPA Excel数据清洗实战:空行、重复、乱码、格式混乱的处理

数据采集出来不等于能用。你从网页上扒下来的数据往往是脏的——有空行、有重复、有乱码、格式不统一、数字和文本混在一起。

这篇文章不讲Excel操作的基本语法,讲的是数据清洗的真实套路。用的工具是影刀自带的动作 + Python的openpyxl/pandas。


清洗前先看一眼数据长什么样

很多人一拿到数据就开始写清洗逻辑,结果写到一半发现有些脏数据是自己假设之外的。

第一件事:打开采集到的Excel,肉眼扫一遍。看什么?

  • 有没有空行?在哪些位置?
  • 有没有明显重复的数据?
  • 数字格式对不对?(有没有千分位逗号、百分号、负号位置错误)
  • 日期格式统一吗?(“2026-07-01” 和 “2026/7/1” 混在一起)
  • 有没有乱码?特别是中文列
  • 有没有明显不合理的数据?(价格负数、数量为零、日期在未来)

肉眼扫完大概心里有数了,再上代码批量处理。不要跳过这一步——有时候你以为是格式问题,实际上是采集时就采错了。


清洗1:删除空行

网页采集最容易出现的脏数据——空行。列表里有20个元素,某个元素内容为空,采回来就是一行空数据。

在影刀中处理

店群矩阵自动化突破运营极限!

用ForEach遍历每一行,判断是否全为空:

【读取Excel】→ 全部数据到 data_list clean_list = [] FOR EACH row IN data_list: # 判断这一行是否全空 is_empty = True FOR EACH cell IN row: IF cell 不为空: is_empty = False BREAK END FOR IF is_empty == False: 将 row 加入 clean_list END FOR 【写入Excel】→ clean_list 到新文件

在Python中处理(更高效)

importopenpyxl wb=openpyxl.load_workbook('data.xlsx')ws=wb.active# 收集所有非空行clean_rows=[]forrowinws.iter_rows(values_only=True):# 检查整行是否全为None或空字符串ifany(cellisnotNoneandstr(cell).strip()!=''forcellinrow):clean_rows.append(row)# 写入新sheet或新文件ws_clean=wb.create_sheet('清洗后')forrowinclean_rows:ws_clean.append(row)wb.save('data_cleaned.xlsx')print(f'清洗前:{ws.max_row}行,清洗后:{len(clean_rows)}行')

清洗2:删除重复行

判断"重复"的标准

不是每列都相同才算重复。有时候你只关心"订单号"这一列是否重复:

# 按订单号去重seen=set()unique_rows=[]header=True# 第一行是表头forrowinws.iter_rows(values_only=True):ifheader:unique_rows.append(row)header=Falsecontinue![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/96e175cf96674881babbf9f31232facc.png#pic_center)order_no=row[0]# 假设订单号在第一列iforder_nonotinseen:seen.add(order_no)unique_rows.append(row)print(f'去重后:{len(unique_rows)}行')

如果是多列组合判断重复(同一客户+同一天算重复):

seen=set()unique_rows=[]forrowinws.iter_rows(values_only=True):key=(row[1],row[2])# 客户名+日期 作为唯一键ifkeynotinseen:seen.add(key)unique_rows.append(row)

清洗3:处理编码乱码

从网页上采集的中文,存到Excel打开变成乱码。这个问题在CSV文件里尤其常见。

原因:Excel打开CSV时默认用ANSI编码,而你的CSV是UTF-8编码的。

解决方法

importpandasaspd# 读取时指定编码df=pd.read_csv('data.csv',encoding='utf-8')# 或自动检测编码importchardetwithopen('data.csv','rb')asf:raw=f.read()result=chardet.detect(raw)encoding=result['encoding']print(f'检测到编码:{encoding}')df=pd.read_csv('data.csv',encoding=encoding)df.to_excel('data.xlsx',index=False)# 转成xlsx就不会乱码了

根本解决方案:采集下来直接存成.xlsx而不是.csv.xlsx自带编码信息,不存在乱码问题。


清洗4:数字格式标准化

从网页上采集的数字,格式千奇百怪:

原始值问题目标值
“¥1,234.56”带货币符号和逗号1234.56
“1 234,56”空格分隔+逗号小数(欧洲格式)1234.56
“35%”百分比0.35

| “-1,234” | 负号在逗号前面 | -1234 |
| “12K” / “1.2万” | 缩写 | 12000 |

数字清洗通用函数

importredefclean_number(raw_value):ifraw_valueisNone:returnNones=str(raw_value).strip()# 空字符串ifs==''ors=='-':returnNone# 处理"万"if'万'ins:s=s.replace('万','')try:returnfloat(s.replace(',',''))*10000except:returnNone# 处理"K"ifs.upper().endswith('K'):try:returnfloat(s[:-1].replace(',',''))*1000except:returnNone# 处理百分比ifs.endswith('%'):try:returnfloat(s[:-1])/100except:returnNone# 通用数字处理:去货币符号、去逗号、去空格s=re.sub(r'[¥$€¥\s]','',s)s=s.replace(',','')# 千分位逗号try:returnfloat(s)except:returnNone# 确实不是数字# 使用示例print(clean_number('¥1,234.56'))# 1234.56print(clean_number('35%'))# 0.35print(clean_number('1.2万'))# 12000.0print(clean_number('-1,234'))# -1234.0

temu店群自动化报活动案例

清洗5:日期格式统一

日期格式是数据清洗里最容易翻车的环节。同一个Excel里可能出现:

  • 2026-07-01
  • 2026/7/1
  • 7月1日
  • 2026年7月1日
  • 20260701

统一处理:

fromdatetimeimportdatetimeimportredefclean_date(raw_value):ifraw_valueisNone:returnNones=str(raw_value).strip()# 已经是标准格式的forfmtin['%Y-%m-%d','%Y/%m/%d','%Y%m%d']:try:returndatetime.strptime(s,fmt).strftime('%Y-%m-%d')except:pass# 中文格式s_clean=s.replace('年','-').replace('月','-').replace('日','')try:returndatetime.strptime(s_clean,'%Y-%m-%d').strftime('%Y-%m-%d')except:pass# 如果上面都不行,尝试解析try:fromdateutilimportparser dt=parser.parse(s)returndt.strftime('%Y-%m-%d')except:returnNone# 放弃,标记为无效日期

清洗6:文本列的去噪

网页上采集的文本常常带HTML标签、多余的空白、特殊字符:

importredefclean_text(raw_value):ifraw_valueisNone:return''s=str(raw_value)# 移除HTML标签s=re.sub(r'<[^>]+>','',s)# 移除不可见字符(零宽空格等)s=re.sub(r'[\u200b\u200c\u200d\ufeff]','',s)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c053d25c8e6a4182a0385fc6003186a9.png#pic_center)# 移除开头结尾的空白s=s.strip()# 多个空格/换行合并成一个s=re.sub(r'\s+',' ',s)# 移除全角数字转半角(可选)# s = s.translate(str.maketrans('0123456789', '0123456789'))returns

完整清洗流程组合

把上面的处理串起来,做成一个可复用的清洗流程:

# === 影刀采集 → Excel → Python清洗 → 干净Excel ===importopenpyxlfromdatetimeimportdatetimedeffull_clean(input_file,output_file,column_rules):""" column_rules: { 0: 'text', # 第0列做文本清洗 1: 'number', # 第1列做数字清洗 2: 'date', # 第2列做日期清洗 3: None, # 第3列原样保留 } """wb=openpyxl.load_workbook(input_file)ws=wb.active clean_data=[]forrow_idx,rowinenumerate(ws.iter_rows(values_only=True)):# 空行跳过ifall(cellisNoneorstr(cell).strip()==''forcellinrow):continuenew_row=list(row)forcol_idx,ruleincolumn_rules.items():ifrule=='number':new_row[col_idx]=clean_number(row[col_idx])elifrule=='date':new_row[col_idx]=clean_date(row[col_idx])elifrule=='text':new_row[col_idx]=clean_text(row[col_idx])# rule == None: 原样保留clean_data.append(new_row)# 去重(按第一列)seen=set()unique_data=[]forrowinclean_data:key=row[0]ifkeynotinseen:seen.add(key)unique_data.append(row)# 写回ws_out=wb.create_sheet('Cleaned')forrowinunique_data:ws_out.append(row)wb.save(output_file)print(f'清洗完成:原始{ws.max_row}行 → 清洗后{len(unique_data)}行')

核心要点:数据清洗80%的工作量在"识别脏数据",只有20%在"写清洗代码"。先肉眼扫数据,确认脏数据的模式,再写代码。不要假设数据是干净的——采集回来的数据永远是脏的。


作者:林焱

http://www.jsqmd.com/news/1152122/

相关文章:

  • Stable Diffusion批量生成商品主图:单日产出2000+合规图,中小卖家必须掌握的3个LoRA微调技巧
  • TikTok爆款搬运与二创全链路:从无水印提取到AI去重复刻,这套工具组合让产能翻倍
  • [TradeAI] Kario 系统启动与运维指南
  • 7000元保鲜强的冰箱怎么选?海尔麦浪9系测评
  • word文档如何按照章节修改页眉
  • 储能充电桩186kWh/120kW配置:老旧小区电网扩容的3种替代方案
  • BurpSuite 2023.12 垂直越权实战:3步手工测试与2类常见响应结果分析
  • 3 种蛋白质理化性质计算方案对比:Expasy vs BioPython vs EMBOSS
  • 拒绝黑箱计算,用 Python 沙箱让金融 Agent 的分析结果可审计
  • 最大公有云核心算力池迎来“中国芯“
  • Transformer+物理约束的PCT模型
  • Cursor AI × Angular开发闭环(企业级工程实践大揭秘):从Prompt设计到CI/CD自动集成
  • 信安毕设2026课题100例
  • 影刀RPA Excel批注管理:添加与读取批注
  • AI编程生产力断层真相:Claude Code的RAG架构缺陷 vs Cursor的AST-aware编辑器深度集成——资深架构师20年经验解构
  • 【SSM课程设计/毕业设计】基于前后端分离的学生干部事务审批系统的设计与实现 基于 SSM+Vue 的学生干部综合考评系统【附源码、数据库、万字文档】
  • 第十三:Python+Airtest+poco+pytest+pytest-html实现Android App自动化测试框架
  • 为什么你的SD出图总发灰?Stable Diffusion模型推荐暗藏玄机:3个被99%新手忽略的精度匹配陷阱
  • DDR4 和 DDR5 的价格太离谱了,准备继续用DDR3了
  • Core2vst – 苹果macOS虚拟跳线内录/直播跳线工具 使用教程
  • 百度网盘提取码终极指南:3秒解锁加密资源的免费神器
  • 芯片音乐电台来袭!Aleph Void 全天候直播,带你感受 8 位音效魅力
  • 2026Word转PDF完整实操指南:电脑自带免工具方案与免费无水印转换工具汇总
  • 领英好友乱成一锅粥?用这个分组备注功能,B2B 获客效率翻倍|附干货
  • Word2Vec 与 BERT 词嵌入对比:3个维度解析语义捕捉差异与适用场景
  • 【Stable Diffusion电商合规白皮书】:规避版权雷区、通过平台审核、过审率98.7%的提示词工程体系
  • Claude Code vs Cursor:从LLM token效率到IDE事件循环劫持——底层原理级拆解(附可复现的CPU/GPU内存占用热力图)
  • 注塑机效率看不准?警惕OEE计算中的常见陷阱
  • PG 日报|每位 DBA 必知的 PostgreSQL 5 大性能瓶颈
  • 标杆案例|AIGC宣发智能体,让影视营销迈入「一片一策」智能生产时代