You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本实现两Excel表格signals匹配填充new_name列问题排查

问题排查与修正:基于Pandas的Excel信号名称匹配脚本

需求说明

现有两个Excel表格:

  • Table1:包含signals(信号长名称)列和new_name(信号短名称)列
  • Table2:仅包含signals列

需要实现逻辑:为Table2新增new_name列,若Table2的signals值在Table1中存在,则对应填充Table1的new_name值;不存在则填充-。

原代码问题分析

你写的代码存在以下几个关键问题:

  • 嵌套循环效率低下:两层for循环遍历数据,当表格行数较多时(比如Table2有几百行),运行速度会极慢,不符合Pandas的高效处理原则
  • 硬编码列索引:用iat[i,3]、iat[i,22]固定列位置,若表格列顺序调整,代码直接失效,应该用列名访问数据
  • 循环逻辑错误:外层循环每遍历一行Table1数据,就会重新覆盖所有Table2行的结果,最终只有最后一次匹配的结果会保留,之前的正确匹配会被错误覆盖为-
  • 未完成结果写入:仅将结果存到字典arr,没有写回DataFrame,也未执行保存Excel的操作

修正后的代码

import pandas as pd

def open_xlsx(_file_dir):
    # 读取Excel,用列名访问,避免索引依赖
    df = pd.read_excel(_file_dir, engine="openpyxl")
    df.fillna('', inplace=True)
    return df

# 读取两个表格
table1 = open_xlsx(r"Table1.xlsx")
table2 = open_xlsx(r"Table2.xlsx")

# 构建signals到new_name的映射字典
signal_map = table1.set_index('signals')['new_name'].to_dict()

# 为Table2新增new_name列,匹配不到则填充'-'
table2['new_name'] = table2['signals'].map(signal_map).fillna('-')

# 保存结果到Excel(建议存为新文件避免覆盖原数据,需覆盖可修改路径)
table2.to_excel(r"Table2_updated.xlsx", index=False)

代码说明

  1. 列名访问数据:全程用signals、new_name列名操作,避免索引硬编码的脆弱性
  2. 映射字典+map函数:用Pandas内置的map实现高效匹配,比嵌套循环效率提升几个数量级
  3. 结果填充与保存:用fillna('-')处理未匹配的情况,最后直接将更新后的DataFrame保存为新Excel文件

内容的提问来源于stack exchange,提问作者Камаль

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:41:44