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

使用Pandas合并列名相似的多个Excel文件的技术疑问

高效合并列名不一致的Excel文件

这个问题太常见了——手动核对重命名确实效率极低,咱们可以通过标准化列名的自动化流程来解决,核心思路是先建立规则把变体列名统一到标准名称,再批量处理。以下是两种实用方案:

方案1:固定映射规则(适合变体可预测的场景)

如果能提前梳理出常见的列名变体(比如复数、大小写、特殊符号替代),直接写一个映射字典,读取文件时自动替换:

import pandas as pd
import glob

# 第一步:定义列名映射,把所有可能的变体指向标准名称
column_mapping = {
    'apples': 'apple',
    'orange': 'orange',  # 自动处理大小写差异
    'sizes': 'size',
    '#': 'id',
    # 可以继续添加你遇到的其他变体,比如'apple_'、'id_num'等
}

# 第二步:写一个标准化列名的函数
def standardize_columns(df):
    # 先把所有列名转小写,消除大小写差异
    df.columns = [col.lower() for col in df.columns]
    # 用映射字典替换列名,没有匹配的保留原列名(也可以标记为未知)
    df.columns = [column_mapping.get(col, col) for col in df.columns]
    return df

# 第三步:批量读取并合并
excel_files = glob.glob('*.xlsx')  # 替换成你的文件路径规则
dfs = []
for file in excel_files:
    df = pd.read_excel(file)
    df = standardize_columns(df)
    dfs.append(df)

merged_df = pd.concat(dfs, ignore_index=True)

进阶技巧:先收集所有列名变体

如果不确定有多少变体,可以先跑一段代码收集所有出现过的列名,再完善映射字典:

all_columns = set()
for file in excel_files:
    df = pd.read_excel(file)
    all_columns.update([col.lower() for col in df.columns])

print("所有出现的列名变体:", all_columns)

方案2:模糊匹配(适合变体复杂、不可预测的场景)

如果列名变体很多(比如拼写错误、随意缩写),可以用fuzzywuzzy库做模糊匹配,自动找到最相似的标准列名:

首先安装依赖:

pip install fuzzywuzzy python-Levenshtein

然后编写代码:

import pandas as pd
import glob
from fuzzywuzzy import process

# 定义你期望的标准列名
target_columns = ['apple', 'orange', 'size', 'id']

def fuzzy_standardize_columns(df):
    df.columns = [col.lower() for col in df.columns]
    new_columns = []
    for col in df.columns:
        # 匹配最相似的标准列名,返回匹配结果和相似度分数
        match, score = process.extractOne(col, target_columns)
        # 设置相似度阈值(比如80分以上才替换,避免错误匹配)
        if score >= 80:
            new_columns.append(match)
        else:
            # 不匹配的列可以保留原名称,或者标记为'unknown_' + col
            new_columns.append(f'unknown_{col}')
    df.columns = new_columns
    return df

# 批量处理合并
excel_files = glob.glob('*.xlsx')
dfs = [fuzzy_standardize_columns(pd.read_excel(file)) for file in excel_files]
merged_df = pd.concat(dfs, ignore_index=True)

注意事项

  • 模糊匹配的阈值可以根据实际情况调整,比如变体和标准名差异大就调高阈值,反之调低。
  • 合并后如果有unknown_开头的列,说明这些列名没有匹配到标准列,你可以单独处理这些列。

内容的提问来源于stack exchange,提问作者TylerNG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:37:03