2017-12-21 1 views
1

'국가'열에 alpha_3 국가 코드 ('코드'라는 새 열)로 변환하려는 국가의 이름이 포함 된 데이터 프레임이 있습니다. 나는 pycountry를 사용하고 있지만, 일부 국가 이름이 pycountry 'name'에 속하며, 다른 나라는 pycountry 'common_name'과 'official_name'이므로 오류가 발생합니다.pycountry를 사용하여 이름/공통 이름/공식 이름 확인

내 국가 목록을 변환 할 때 세 가지 모두를 어떻게 확인할 수 있습니까? 참고로, 저는 현재 코드 (지금 당장은 '이름'에서 찾고)을 얻기 위해 다음과 같은 기능을 사용하고 있습니다 :

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

'Iran'는 'Iran, Islamic Republic of'을 인정하기 때문에 '이란'에서는 작동하지 않습니다. 나는이 작업을하기 위해 정규 표현식을 사용할 수 있다는 것을 알고 있지만, 어떻게 해야할지 잘 모르겠습니다. – 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.