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

合并前统一两个Pandas DataFrame国家列拼写的方法问询

解决Pandas DataFrame国家列拼写不一致的合并问题

要让df1的country列拼写匹配df2的标准,核心是建立拼写映射规则,以下是几种实用方案:

1. 手动映射(适合已知所有不一致情况)

如果能明确列出df1和df2的拼写差异,直接创建映射字典替换:

  • 先排查差异:
    # 查看df1独有的国家名
    df1_unique = set(df1['country'].unique())
    df2_unique = set(df2['country'].unique())
    print("df1中有但df2中没有的国家:", df1_unique - df2_unique)
    
  • 创建映射字典,把df1的非标准拼写对应到df2的标准拼写:
    country_mapping = {
        "USA": "United States",
        "UK": "United Kingdom",
        "China Mainland": "China",
        "S. Korea": "South Korea"
    }
    # 替换df1的country列
    df1['country'] = df1['country'].replace(country_mapping)
    

替换完成后再执行pd.merge(df1, df2, on='country', how='left')即可正常匹配。

2. 模糊匹配自动映射(适合大量未知不一致)

如果拼写差异多且不明确,用模糊匹配工具自动匹配最相似的标准名称:

  • 先安装依赖库:
    pip install fuzzywuzzy python-Levenshtein
    
  • 编写匹配函数并应用:
    from fuzzywuzzy import process
    
    def match_country(country_name, standard_countries):
        # 找到最相似的标准国家名,设置匹配阈值(比如80,可调整)
        match, score = process.extractOne(country_name, standard_countries)
        return match if score >= 80 else country_name  # 低于阈值保留原名称
    
    # 用df2的国家名作为标准库
    standard_countries = df2['country'].unique()
    df1['country'] = df1['country'].apply(lambda x: match_country(x, standard_countries))
    

注意:阈值需要根据实际拼写差异调整,避免错误匹配。

3. 基础标准化预处理(统一格式)

先对两列做格式清洗,消除大小写、空格、特殊字符的差异:

# 统一转小写、去除首尾空格、替换特殊字符
def standardize_country(col):
    return col.str.strip()\
              .str.lower()\
              .str.replace('[^a-zA-Z0-9 ]', '', regex=True)

df1['country'] = standardize_country(df1['country'])
df2['country'] = standardize_country(df2['country'])

这种方法能解决大部分因格式导致的不匹配,比如" united states "和"UnitedStates"会被统一为"united states"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:46:00