#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