Python中基于Result列修正Status列值并合并Excel文件
高效Python实现方案:修正Status并合并Excel数据
咱直接用pandas来搞定这个需求,它处理表格数据和Excel操作的效率拉满,完全符合你的要求。下面是分步实现的思路和完整代码:
步骤1:明确Status与Result的正确映射规则
首先你得把题目里提到的特定对应关系整理成字典,比如假设你的规则是(你可以根据实际情况修改):
- Result为
"Completed"→ Status修正为"SP" - Result为
"Failed"→ Status修正为"FA" - Result为
"Pending"→ Status修正为"WO"
status_result_map = { "Completed": "SP", "Failed": "FA", "Pending": "WO" }
步骤2:读取待处理数据与现有Excel文件
用pandas的read_excel方法读取两个文件,这里假设:
待修正数据.xlsx是包含错误Status的数据源现有数据.xlsx是需要合并进去的目标文件
import pandas as pd # 读取待修正的数据 df_to_fix = pd.read_excel("待修正数据.xlsx") # 读取现有Excel数据 df_existing = pd.read_excel("现有数据.xlsx")
步骤3:修正Status列的错误取值
直接用map方法根据Result列和映射字典替换错误的Status值,一步到位:
# 修正Status列,用Result匹配映射字典;若Result不在映射中则保留原Status df_to_fix["Status"] = df_to_fix["Result"].map(status_result_map).fillna(df_to_fix["Status"])
步骤4:以ADSL为匹配键合并数据
用merge方法实现合并,这里选择left连接(保留现有数据的所有行,只把修正后的数据匹配进去),你也可以根据需求换成inner(只保留双方都有的ADSL)或者outer(保留所有行):
# 合并数据,on指定匹配键为ADSL,how选择合并方式 df_merged = pd.merge(df_existing, df_to_fix[["ADSL", "Status"]], on="ADSL", how="left", suffixes=("", "_fixed")) # 用修正后的Status覆盖现有数据的对应值,未匹配到的保留原Status df_merged["Status"] = df_merged["Status_fixed"].fillna(df_merged["Status"]) # 删掉临时生成的辅助列 df_merged.drop(columns=["Status_fixed"], inplace=True)
步骤5:保存合并后的结果回Excel
最后把处理好的数据保存回文件(建议先保存到新文件,避免误覆盖原数据):
# 保存到新文件,index=False避免生成多余的索引列 df_merged.to_excel("合并后的数据.xlsx", index=False)
完整可运行代码
把上面的步骤整合起来,就是完整的实现代码:
import pandas as pd # 1. 定义Status与Result的正确映射(根据你的实际规则修改) status_result_map = { "Completed": "SP", "Failed": "FA", "Pending": "WO" } # 2. 读取数据 df_to_fix = pd.read_excel("待修正数据.xlsx") df_existing = pd.read_excel("现有数据.xlsx") # 3. 修正Status列 df_to_fix["Status"] = df_to_fix["Result"].map(status_result_map).fillna(df_to_fix["Status"]) # 4. 合并数据 df_merged = pd.merge(df_existing, df_to_fix[["ADSL", "Status"]], on="ADSL", how="left", suffixes=("", "_fixed")) df_merged["Status"] = df_merged["Status_fixed"].fillna(df_merged["Status"]) df_merged.drop(columns=["Status_fixed"], inplace=True) # 5. 保存结果 df_merged.to_excel("合并后的数据.xlsx", index=False)
额外说明
- 如果Excel文件有多个工作表,可以用
pd.read_excel的sheet_name参数指定读取目标工作表 - 哪怕数据量达到几十万行,pandas也能高效处理,比手动操作Excel快N倍
- 合并方式可灵活调整:
how="left"保留现有数据所有行,how="inner"只保留两边共有的ADSL行,how="outer"保留所有行
内容的提问来源于stack exchange,提问作者kenneth_V
相关产品推荐
相关产品推荐

