如何向GDP数据集中补充缺失的国家代码
GDP数据集缺失国家代码补全解决方案
1. 准备映射数据源
- 可以直接调用Python内置的
pycountry库生成标准国家名称与ISO 2位/3位国家代码的映射表,无需额外下载外部数据集,覆盖绝大多数主权国家和地区。 - 如果你已持有自定义的完整国家代码数据集,直接读取为结构化表格(如DataFrame)备用即可,确保映射表包含标准国家名称、对应国家代码两个必要字段。
2. 名称标准化与匹配
- 先对两个数据集的国家名称做统一清洗:全部转为小写、去除特殊符号、去除前后空格、预设别名映射(例如将“United States of America”“US”统一映射为“United States”),大幅提升匹配准确率。
- 优先做精确匹配,剩余未匹配的条目可使用字符串相似度模糊匹配,Python的
fuzzywuzzy库可实现该功能,设置90%及以上的相似度阈值自动匹配,低于阈值的条目单独人工校验即可。
3. 数据补全与校验
- 匹配完成后将得到的国家代码填充到原GDP数据集的对应缺失位置,注意保留原数据集的行顺序不变。
- 最终校验:检查补全后的数据是否还有剩余缺失,确认特殊地区的代码规则是否和你现有数据集的规范保持一致。
参考实现代码
import pandas as pd import pycountry from fuzzywuzzy import fuzz # 读取原GDP数据集 gdp_df = pd.read_csv("你的GDP数据集路径.csv") # 生成标准国家代码映射表,此处示例用ISO 3位国家代码 country_map = {c.name.lower(): c.alpha_3 for c in pycountry.countries} # 匹配函数 def match_country_code(country_name): if pd.isna(country_name): return None clean_name = country_name.strip().lower() # 精确匹配优先 if clean_name in country_map: return country_map[clean_name] # 模糊匹配兜底 for std_name, code in country_map.items(): if fuzz.ratio(clean_name, std_name) >= 90: return code # 匹配不到留空待人工处理 return None # 仅填充国家代码为空的行 gdp_df.loc[gdp_df["国家代码"].isna(), "国家代码"] = gdp_df.loc[gdp_df["国家代码"].isna(), "国家名称"].apply(match_country_code) # 导出补全后的数据集 gdp_df.to_csv("补全后GDP数据集.csv", index=False)
内容的提问来源于stack exchange,提问作者CoryAnder
相关产品推荐
相关产品推荐

