合并前统一两个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
相关产品推荐
相关产品推荐

