как сделать эту операцию в пандах - PullRequest
1 голос
/ 28 сентября 2019

У меня есть фрейм данных, который содержит столбец страны.К сожалению, все названия стран написаны заглавными буквами, и мне нужно, чтобы они были ISO3166_1_Alpha_3
в качестве примера Соединенные Штаты Америки будут США Великобритания будет Великобританией и т. Д.

К счастью, я нашелэтот фрейм данных в Интернете, который содержит 2 важных столбца. Первый - это название страны, а второй - ISO3166_1_Alpha_3. Фрейм данных можно найти на этом веб-сайте. https://datahub.io/JohnSnowLabs/iso-3166-country-codes-itu-dialing-codes-iso-4217-currency-codes

Итак, я написал этот код

data_geo = pd.read_excel("tab0.xlsx")#this is the data frame that contains all the capitalized country name
country_iso = pd.read_csv(r"https://datahub.io/JohnSnowLabs/iso-3166-country-codes-itu-dialing-codes-iso-4217-currency-codes/r/iso-3166-country-codes-itu-dialing-codes-iso-4217-currency-codes-csv.csv",
                          usecols=['Official_Name_English', 'ISO3166_1_Alpha_3'])

s = pd.Series(data_geo.countery_name_e).str.lower().str.title()#this line make all the names characters small except the first character
y = pd.Series([])

Теперь я хочу сделать цикл, когда

s = Official_Name_English 

Я хочу добавить

country_iso[Official_Name_English].ISO3166_1_Alpha_3

к серии Y.Если название страны отсутствует в этом списке, добавьте NaN, это 20 строк в с

['Diffrent Countries', 'Germany', 'Other Countries', 'Syria',
       'Jordan', 'Yemen', 'Sudan', 'Somalia', 'Australia',
       'Other Countries', 'Syria', 'Lebanon', 'Jordan', 'Yemen', 'Qatar',
       'Sudan', 'Ethiopia', 'Djibouti', 'Somalia', 'Botswana Land']

Знаете, как я могу это сделать?

1 Ответ

1 голос
/ 28 сентября 2019

Вы можете попробовать map:

data_geo = pd.read_excel("tab0.xlsx")
country_iso = pd.read_csv(r"https://datahub.io/JohnSnowLabs/iso-3166-country-codes-itu-dialing-codes-iso-4217-currency-codes/r/iso-3166-country-codes-itu-dialing-codes-iso-4217-currency-codes-csv.csv",
                      usecols=['Official_Name_English', 'ISO3166_1_Alpha_3'])
s = pd.Series(data_geo.countery_name_e).str.lower().str.title()

mapper = (country_iso.drop_duplicates('Official_Name_English')
                     .dropna(subset=['Official_Name_English'])
                     .set_index('Official_Name_English')['ISO3166_1_Alpha_3'])
y = data_geo['countery_name_e'].map(mapper)
...