Как заменить столбец фрейма данных pandas значениями поиска из словаря?

#python #pandas #dataframe #dictionary

Вопрос:

Предположим, у меня есть следующий простой фрейм данных pandas:

 df = pd.DataFrame({"id": [1, 2, 3, 4, 5],
                   "country": ["Netherlands", "Germany", "United_States", "England", "Canada"]})
 

и словарь с сокращениями для значений в country столбце:

 abr = {"Netherlands": "NL",
       "Germany": "GE",
       "United_States": "US",
       "England": "EN",
       "Canada": "CA"
}
 

Я хочу изменить значения в country столбце фрейма данных на значения поиска в словаре. Результат будет выглядеть так:

     id  country
0   1   NE
1   2   GE
2   3   US
3   4   EN
4   5   CA
 

Я попытался сделать это с помощью

 df["country"] = abr[df["country"]]
 

но это приводит к следующей ошибке:

 TypeError: 'Series' objects are mutable, thus they cannot be hashed
 

Я понимаю, почему возникает эта ошибка (код пытается хэшировать объект вместо строкового значения в столбце), но есть ли способ решить эту проблему?

Ответ №1:

Вы можете использовать функцию pandas replace() , специально продуманную для этих сценариев. Будьте осторожны, чтобы не перепутать его со встроенным python .str.repace() , который не использует словари.

Попробуйте с:

 df['country'] = df['country'].replace(abr)
 

Комментарии:

1. Вот для чего мы здесь!

Ответ №2:

 df["country"] = df["country"].map(abr)
print(df)
 

С принтами:

    id country
0   1      NL
1   2      GE
2   3      US
3   4      EN
4   5      CA