Excel多工作表列匹配合并及DataFrame实现可行性咨询
需求实现方案
这个需求完全可以实现,不管是直接在Excel中操作,还是将文件转换为DataFrame后用代码处理都能达成目标。以下是两种方案的具体实现步骤:
一、Excel原生操作实现
核心逻辑是通过模糊匹配,从第二个工作表的Animal列中找到与第一个工作表Animal_with_age字段匹配的内容,再调整格式输出:
预处理第二个工作表:
- 在
Sheet2新增辅助列(比如B列),输入公式处理Animal列内容:- 生成匹配用的清理字段:
=LOWER(SUBSTITUTE(TRIM(A2), " ", "")) - 生成符合要求的输出格式:
=IF(ISNUMBER(SEARCH(" ", TRIM(A2))), LOWER(SUBSTITUTE(TRIM(A2), " ", "")), PROPER(TRIM(A2)))
- 生成匹配用的清理字段:
- 下拉填充公式完成所有行的处理。
- 在
在第一个工作表匹配并填充结果:
- 在
Sheet1新增Animal列(比如B列),输入数组公式(旧版Excel按Ctrl+Shift+Enter执行,新版直接回车):=INDEX(Sheet2!$C$2:$C$6, MATCH(TRUE, ISNUMBER(SEARCH(Sheet2!$B$2:$B$6, LOWER(TRIM(A2)))), 0)) - 下拉填充公式,即可得到期望的匹配结果。
- 在
二、转换为DataFrame后实现(Python Pandas)
使用Python的Pandas库可以更灵活地处理匹配逻辑,步骤如下:
读取Excel文件到DataFrame:
import pandas as pd # 替换为你的Excel文件路径 df_age = pd.read_excel('animal_data.xlsx', sheet_name=0) df_animal = pd.read_excel('animal_data.xlsx', sheet_name=1)预处理数据,统一匹配规则:
# 处理第一个表:清理字段前后空格并转小写,用于匹配 df_age['clean_age'] = df_age['Animal_with_age'].str.strip().str.lower() # 处理第二个表:生成匹配用的清理字段,同时生成符合要求的输出格式 df_animal['clean_animal'] = df_animal['Animal'].str.strip().str.lower().str.replace(' ', '') df_animal['output_animal'] = df_animal.apply( lambda x: x['Animal'].strip().lower().replace(' ', '') if ' ' in x['Animal'].strip() else x['Animal'].strip().title(), axis=1 )执行匹配逻辑:
def find_matching_animal(row): # 遍历第二个表的清理后字段,找到匹配的子串 match = df_animal[df_animal['clean_animal'].apply(lambda s: s in row['clean_age'])] return match['output_animal'].values[0] if not match.empty else None df_age['Animal'] = df_age.apply(find_matching_animal, axis=1)清理临时字段,输出结果:
# 移除辅助字段,得到最终结果 final_df = df_age.drop('clean_age', axis=1) print(final_df)
执行上述代码后,final_df的结构和内容就会与你期望的输出一致。
内容的提问来源于stack exchange,提问作者Nikita Menon
相关产品推荐
相关产品推荐

