Как заменить название страны в столбцах данных на континент? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть датафрейм, как этот.

problem.head(30)
Out[25]: 
     Country
0     Sweden
1     Africa
2     Africa
3     Africa
4     Africa
5    Germany
6    Germany
7    Germany
8    Germany
9         UK
10   Germany
11   Germany
12   Germany
13   Germany
14    Sweden
15    Sweden
16    Africa
17    Africa
18    Africa
19    Africa
20    Africa
21    Africa
22    Africa
23    Africa
24    Africa
25    Africa
26  Pakistan
27  Pakistan
28        ZA
29        ZA

Теперь я хочу заменить название страны на название континента. Таким образом, название страны будет заменено названием континента.

То, что я сделал, я создал весь массив Continent (который находится в моем фрейме данных, у меня 56 стран),

asia = ['Afghanistan', 'Bahrain', 'United Arab Emirates','Saudi Arabia', 'Kuwait', 'Qatar', 'Oman',
    'Sultanate of Oman','Lebanon', 'Iraq', 'Yemen', 'Pakistan', 'Lebanon', 'Philippines', 'Jordan']
europe = ['Germany','Spain', 'France', 'Italy', 'Netherlands', 'Norway', 'Sweden','Czech Republic', 'Finland',
      'Denmark', 'Czech Republic', 'Switzerland', 'UK', 'UK&I', 'Poland', 'Greece','Austria',
      'Bulgaria', 'Hungary', 'Luxembourg', 'Romania' , 'Slovakia', 'Estonia', 'Slovenia','Portugal',
      'Croatia', 'Lithuania', 'Latvia','Serbia', 'Estonia', 'ME', 'Iceland' ]
africa = ['Morocco', 'Tunisia', 'Africa', 'ZA', 'Kenya']
other = ['USA', 'Australia', 'Reunion', 'Faroe Islands']

Теперь пытаемся заменить, используя

dataframe['Continent'] = dataframe['Country'].replace(asia, 'Asia', regex=True)

где Азия - это имя моего списка, а Азия - текст для замены. Но не работает это работает только для

dataframe['Continent'] = dataframe['Country'].replace(np.nan, 'Asia', regex=True)

Итак, помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Использование apply с пользовательской функцией.

Демо:

import pandas as pd
asia = ['Afghanistan', 'Bahrain', 'United Arab Emirates','Saudi Arabia', 'Kuwait', 'Qatar', 'Oman',
    'Sultanate of Oman','Lebanon', 'Iraq', 'Yemen', 'Pakistan', 'Lebanon', 'Philippines', 'Jordan']
europe = ['Germany','Spain', 'France', 'Italy', 'Netherlands', 'Norway', 'Sweden','Czech Republic', 'Finland',
      'Denmark', 'Czech Republic', 'Switzerland', 'UK', 'UK&I', 'Poland', 'Greece','Austria',
      'Bulgaria', 'Hungary', 'Luxembourg', 'Romania' , 'Slovakia', 'Estonia', 'Slovenia','Portugal',
      'Croatia', 'Lithuania', 'Latvia','Serbia', 'Estonia', 'ME', 'Iceland' ]
africa = ['Morocco', 'Tunisia', 'Africa', 'ZA', 'Kenya']
other = ['USA', 'Australia', 'Reunion', 'Faroe Islands']

def GetConti(counry):
    if counry in asia:
        return "Asia"
    elif counry in europe:
        return "Europe"
    elif counry in africa:
        return "Africa"
    else:
        return "other"

df = pd.DataFrame({"Country": ["Sweden", "Africa", "Africa", "Germany", "Germany", "UK","Pakistan"]})
df['Continent'] = df['Country'].apply(lambda x: GetConti(x))
print(df)

Выход:

    Country Continent
0    Sweden    Europe
1    Africa    Africa
2    Africa    Africa
3   Germany    Europe
4   Germany    Europe
5        UK    Europe
6  Pakistan      Asia
0 голосов
/ 01 мая 2018

Было бы лучше хранить карту страны к континенту в виде словаря, а не четырех отдельных списков. Вы можете сделать это следующим образом, начиная с текущих списков:

continents = {country: 'Asia' for country in asia}
continents.update({country: 'Europe' for country in europe})
continents.update({country: 'Africa' for country in africa})
continents.update({country: 'Other' for country in other})

Затем вы можете использовать функцию Pandas map для отображения континентов на страны:

dataframe['Continent'] = dataframe['Country'].map(continents)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...