Я пытаюсь заменить все коды ISO стран на Полные названия стран, чтобы все было согласованно, как часть очистки некоторых данных. Мне удалось найти пакет pycountry
, который очень помогает! В CSV-файле есть несколько пустых полей, которые, как мне кажется, вызывают некоторые проблемы при запуске моего кода ниже.
Кроме того, дополнительный вопрос, не уверен, что это только я, но бывают случаи, когда CSV читает пустые файлы как ноль / NaN или просто пусто. Я действительно не знаю, что там пошло не так, но, если возможно, я хотел бы изменить все эти пустые ячейки в одну «вещь» или тип для простоты фильтрации / удаления.
df = pd.read_csv("file.csv")
#use pycountry to match the Nationalities as actual country names
import pycountry
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['Nationality'])==2 and df['Nationality'] in list_alpha_2):
return pycountry.countries.get(alpha_2=df['Nationality']).name
elif (len(df['Nationality'])==3 and df['Nationality'] in list_alpha_3):
return pycountry.countries.get(alpha_3=df['Nationality']).name
elif (len(df['Nationality'])>3):
return df['Nationality']
else:
return '#N/A'
df['Nationality']=df.apply(country_flag,axis =1)
df
Я ожидал, что результат будет примерно таким:
0 AF 100 Afghanistan
1 #N/A
2 AUS 140 Australia
3 Germany 400 Germany
Я получаю сообщение об ошибке
TypeError: ("object of type 'float' has no len()", 'occurred at index 0')
Тем не менее, в столбце «Национальность», над которым я работаю, не должно быть значений типа float. Я предполагаю, что это просто пустые / нулевые / NaN-значения, считающиеся типом с плавающей запятой?