使用pycountry检查name / common_name / official_name

问题描述 投票:3回答:2

我有一个数据框,其中“国家/地区”列包含我要转换为alpha_3国家/地区代码的国家/地区的名称(在标有“代码”的新列中)。我正在使用pycountry,但由于一些国家名称属于pycountry'name'而遇到错误,而另一些则是pycountry'common_name'和'official_name'。

转换我的国家/地区列表时,如何检查所有三个?作为参考,我目前正在使用以下函数来获取代码(现在它只是查看'name'):

def get_country_code(x):
    return pycountry.countries.get(name=x).alpha_3

df = get_data('data.csv')
df['Code'] = df['Country'].apply(get_country_code)

编辑:示例数据:

Country
Afghanistan
Bolivia
Iran (Islamic Republic of)

任何帮助,将不胜感激!

python python-3.x pandas dataframe
2个回答
2
投票

使用pycountry.countries.lookup

>>> pycountry.countries.lookup('Bolivia')
Country(alpha_2='BO', alpha_3='BOL', common_name='Bolivia', name='Bolivia, Plurinational State of', numeric='068', official_name='Plurinational State of Bolivia')

0
投票

对于简单的子字符串匹配,您可以使用in

import pycountry

def get_country_code(name):
    for co in list(pycountry.countries):
        if name in co.name:
            return co.alpha_3
    return None

names = "Afghanistan", "Bolivia", "Iran", "Molvania", "I"

for name in names:
    print(name, get_country_code(name))

这会产生:

Afghanistan AFG
Bolivia BOL
Iran IRN
Molvania None
I ALA

您需要决定如何处理搜索失败,在上面我返回可能没用的None。此外,只返回第一场比赛,因此“I”与奥兰群岛相匹配。

© www.soinside.com 2019 - 2024. All rights reserved.