Как условно изменить значения в серии pandas? - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь выполнить базовый c анализ данных из фрейма данных, который был объединен с использованием трех других фреймов данных. Как вы понимаете, после слияния в некоторых столбцах фрейма данных есть значения NaN. Все отдельные фреймы данных содержат почти одинаковые заголовки, но относятся к трем разным годам (2017,2018,2019)

Мои интересующие данные относятся к 2 столбцам:

  1. a столбец с названиями стран по всему миру («СТРАНА»)

  2. столбец с именем «РЕГИОН» (который описывает географическое положение страны, например, «Африка к югу от Сарахана» "," Латинская Америка "и т. Д. c).

Поскольку столбцы страны и региона не меняются (т.е. они всегда должны соответствовать), я подумал, что есть способ измените значения NaN в строках столбца df.REGION, чтобы они соответствовали соответствующей стране в соответствующей строке. Я sh, чтобы сделать это постоянным изменением df.

Я попытался использовать сопоставление фреймов данных но не смог. Итак, я попытался найти словарь и метод l oop (который, похоже, тоже неверный способ go). Но это код, который я пробовал ниже. Спойлер .... это не сработало.

dictionary = {'Belize':'Latin America and Caribbean',
              'Namibia':'Sub-Saharan Africa', 
              'Puerto Rico':'Latin America and Caribbean',
              'Somalia':'Sub-Saharan Africa', 
              'Somaliland Region':"Sub-Saharan Africa",
               'South Sudan':'Sub-Saharan Africa'}

for i, row in df.iterrows():
    country = df.COUNTRY
    region = df.REGION
    for key in dictionary:
        if country in dictionary:
            df.REGION = dictionary[d]

В приведенном выше словаре указано название страны как ключи, а регионы как значения.

Кто-нибудь знает способ использования какой-либо функции сопоставления для заполнения отсутствующих (NaN) значений ( т.е. названия регионов) в столбце РЕГИОН, который соответствует названиям стран в словаре выше?

Любая помощь приветствуется.

Заранее спасибо, ребята

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Вы можете использовать функцию map и заменить все значения, где REGION равно None:

df = pd.DataFrame({"COUNTRY": ["Germany", "USA", "Belize"],
               "REGION": ["Europe", "North America", None]})

df.loc[df.REGION.isnull(), "REGION"] = df.loc[df.REGION.isnull()].COUNTRY.map(dictionary)
1 голос
/ 25 мая 2020

Довольно просто, используя replace:

df = pd.DataFrame({'Country': ['Namibia', 'Belize']})

df['Region'] = df.Country.replace(dictionary)

Результат:

   Country                       Region
0  Namibia           Sub-Saharan Africa
1   Belize  Latin America and Caribbean
...