2017-12-21 14 views
1

私は、 'Country'列にalpha_3国コードに変換しようとしている国の名前が含まれているデータフレームを持っています。私はこれにpycountryを使用していますが、いくつかの国名がpycountry 'name'に該当するのに対し、pycountry 'common_name'と 'official_name'にはエラーが発生しています。pycountryを使って名前/ common_name/official_nameを確認する

私の国のリストを変換する際に3つすべてを確認するにはどうすればよいですか?参考のために、私は現在のコード(今それが唯一の「名前」を見ています)を取得するには、以下の機能を使用しています:

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) 

+0

データサンプルを追加することはできますか?3-4行ですか? – jezrael

+1

すべての属性を試して例外をキャッチできますか? – Eric

+0

@jezraelが追加されました! – ilee

答えて

1

単純化した部分文字列の照合に使用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

これは、「イラン、イスラム共和国」のみを認識するため、「イラン」では機能しません。私は正規表現を使ってこの作業を行うことができることを知っていますが、どうすればよいか分かりません。 – ilee

+0

それでは、名前からコードまでの独自のマッピングを作成する必要があります。それほど悪くはありません。わずか200人ほどです。 – pacholik

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"はAlandと一致しますI slands。

関連する問題