Опускать фигурные скобки при использовании .map в Pandas для создания столбца из словаря - PullRequest
0 голосов
/ 07 июня 2018

Я не уверен, достаточно ли ясен мой заголовок, но у меня возникает следующая проблема: я хочу использовать .map, чтобы создать новый столбец из словаря в моем фрейме данных.Это работает как задумано, за исключением одной проблемы: функция извлекает из словаря целую строку с фигурными скобками, а не только значения.Я много гуглил и не мог найти учебник, который привел бы к другому результату или ответу на этот вопрос.Пример:

df:

  col1
0  a
1  b
2  c

dict:

{ a : {'value' : 2},
  b : {'value' : 4},
  c : {'value' : 1}}

Теперь я хочу использовать .map для создания нового столбца со значениями, соответствующими col1, напримерэто:

  col1  col_new
0  a       2
1  b       4
2  c       1

Вместо этого я получаю следующее:

  col1     col_new
0  a    {'value' : 2}
1  b    {'value' : 4}
2  c    {'value' : 1}

Я использую команду .map:

df["new_col"] = df.col1.map(dict)

Я пытался использоватьto_numeric, но это не имело никакого эффекта, и я думаю, что оно не имеет ничего общего с числовыми / строковыми типами данных.

Любая помощь будет оценена как самоучка.Аналитик, который только начинает работать с Python, у меня иногда возникают проблемы с поиском ответов в документации.

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Если вы не планируете реконструировать свой dict до .map(), подойдет следующий подход.

df['new_col'] = df['col1'].apply(lambda x: dict_[x]['value'])

Выход:

  col1  new_col
0   a   2
1   b   4
2   c   1
0 голосов
/ 07 июня 2018

что значения в словаре установлены для столбца данных

dic = { 'a' : 2, 'b' : 4, 'c' : 1}
df["new_col"] = df.col1.map(dict)

Это должно работать нормально.

0 голосов
/ 07 июня 2018

Что происходит, если значения вашего словаря сами являются словарями.

Так что pd.Series.map будет отображаться только в значения словаря.Больше ничего не может сделать.Существуют некоторые обходные пути.

Используйте itemgetter для извлечения значений

Это извлечет значение для ключа «значение» в каждом словаре.

from operator import itemgetter

df['new_col'] = df['col1'].map(d).apply(itemgetter('value'))

Перед реструктуризацией словаряmapping

Создайте новый словарь с отображением клавиш по вашему желанию, прежде чем отображать ваши серии.

d = {k: v['value'] for k, v in d.items()}
df['new_col'] = df['col1'].map(d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...