如何使用 alpha_2 和 alpha_3 编码的混合从 python 中的国家缩写中获取国家名称

我有一个数据框如下:

df = pd.DataFrame({"country_code": ['AF', 'BEL', 'AUS', 'DE', 'IND', 'US', 'GBR'],
              "amount": [100, 200, 140, 400, 225, 125, 600]})

列国家/地区代码是 2 个字母和 3 个字母国家/地区缩写的混合。

任何人都可以帮助我如何在同一 df 的新列中获取完整的国家/地区名称吗?


偶然的你
浏览 217回答 2
2回答

白板的微信

首先,您应该pycountry通过pip install pycountry在命令提示符下键入并按来安装软件包enter。import pycountryimport pycountrydf = pd.DataFrame({"country_code": ['AF', 'BEL', 'AUS', 'DE', 'IND', 'US', 'GBR','XYZ'],              "amount": [100, 200, 140, 400, 225, 125, 600,0]})list_alpha_2 = [i.alpha_2 for i in list(pycountry.countries)]list_alpha_3 = [i.alpha_3 for i in list(pycountry.countries)]    def country_flag(df):    if (len(df['country_code'])==2 and df['country_code'] in list_alpha_2):        return pycountry.countries.get(alpha_2=df['country_code']).name    elif (len(df['country_code'])==3 and df['country_code'] in list_alpha_3):        return pycountry.countries.get(alpha_3=df['country_code']).name    else:        return 'Invalid Code'df['country_name']=df.apply(country_flag, axis = 1)df   amount country_code    country_name0     100           AF     Afghanistan1     200          BEL         Belgium2     140          AUS       Australia3     400           DE         Germany4     225          IND           India5     125           US   United States6     600          GBR  United Kingdom7       0          XYZ    Invalid Code

桃花长相依

考虑到您有数据集,或者您可以通过 pycountry,您可以使用以下方法进行处理。import pycountrynew_df = df['country-code'].apply(lambda x: pycountry.countries.get(alpha_3=x).name if len(x) == 3 else pycountry.countries.get(alpha_2=x).name)print new_df这打印:new_df0       Afghanistan1           Belgium2         Australia3           Germany4             India5     United States6    United KingdomName: country_code, dtype: object现在,考虑到您对长度为 2 和长度为 3 的代码都有 csv,如下所示: df2  code           name0   AF    Afghanistan1   DE        Germany2   US  United States和df3  code            name0  BEL         Belgium1  AUS       Australia2  IND           India3  GBR  United Kingdom在此之后,您可以按照以下步骤操作:>>> new_df2 = df.merge(df2, left_on='country_code', right_on='code')>>> new_df2   amount country_code code           name0     100           AF   AF    Afghanistan1     400           DE   DE        Germany2     125           US   US  United States>>> new_df3 = df.merge(df3, left_on='country_code', right_on='code')>>> new_df3   amount country_code code            name0     200          BEL  BEL         Belgium1     140          AUS  AUS       Australia2     225          IND  IND           India3     600          GBR  GBR  United Kingdom>>> df23 = pd.concat([new_df2, new_df3])>>> df23.reset_index(inplace=True)>>> df23.drop('index', inplace=True, axis=1)>>> df23   amount country_code code            name0     100           AF   AF     Afghanistan1     400           DE   DE         Germany2     125           US   US   United States3     200          BEL  BEL         Belgium4     140          AUS  AUS       Australia5     225          IND  IND           India6     600          GBR  GBR  United Kingdom
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python