pycountry:将国家/地区名称(可能不完整!)转换为国家/地区代码

时间:2013-03-13 05:38:22

标签: python pandas

我正在尝试使用pycountries库将国家/地区名称数据列表转换为ISO3166国家/地区代码(alpha3)。我的基本功能是:

import pycountries as pc

def guess_country(data, output='alpha3', verbose=False):
    #Check Data isn't already in Alpha3
    try:
        country = pc.countries.get(alpha3=data)
        return country
    except: 
        pass  #KeyError Raised, data doesn't directly match
    #Check if Country is Actual CountryName
    try:
        country = pc.countries.get(name=data)
        return country
    except:
        pass #KeyError Raised, data doesn't directly match
     #Check RegExpr of 'data' in an attempt to match

问题是CountryName数据相当脏......一个简短的样本列表是

GUATMAL,CHINA T,COLOMB,MEXICO,HG KONG

有没有人知道在给定cntry_name的情况下是否有一个包返回最佳“猜测”匹配?我会很高兴有些人因困难而被拒绝(即中国T - >台湾)。如果best_guess返回了一个关于'guess'的确定性的话,那就太好了。

1 个答案:

答案 0 :(得分:5)

您可以使用difflib(内置于python中)来选择密切的国家/地区名称:

import difflib
country_names = [x.name.lower() for x in pycountry.countries]    
matching_countries = difflib.get_close_matches(data, country_names)
confidence = difflib.SequenceMatcher(None, matching_countries[0], data).ratio()

matching_countries将包含相似的国家/地区名称列表。您可以使用选项n和cutoff参数指定返回的结果数和匹配的灵敏度。

注意:get_close_matches方法区分大小写,因此您可能希望在查找匹配项之前将所有内容转换为小写。

我运行了你通过get_close_matches获得的样本数据,除了台湾之外,它都适用于所有人。

如果您有许多已知的棘手匹配,那么可能值得将常用的输入数据字典(如“China T”)用于手动处理这些异常。当然,如果输入数据相对一致,使用简单的字典查找可能是最好的选择。