Я читаю некоторые данные из объекта json, а затем преобразовываю их в фрейм данных, используя pandas.to_json(). После того, как я это сделаю, я хочу выполнить агрегацию полученного фрейма данных, подсчитав количество значений по определенной переменной. Вот краткая информация о типе данных фрейма данных.
df3.types
id object
origin object
dtype: object
Когда я пытаюсь выполнить
df3.groupby(['origin']).count()
Но это выдает ошибку
TypeError: unhashable type: 'dict'
Я не понимаю, как действовать.
Я пытался явно преобразовать id и origin в строки, но это ни к чему не привело. В R я бы просто преобразовал происхождение в фактор, а в SQL это было бы проще простого. Может ли кто-нибудь дать мне предложение о том, как действовать?
Нет, даже если я хэширую значения — строго запрещено. Я мог бы создать полностью синтетические данные, если это поможет, но первый столбец содержит только уникальные строковые значения (каждый раз гарантированно уникальные), а второй столбец — нет. Тем не менее, я только что заметил, что origin на самом деле является одним диктовщиком, чего я раньше не замечал, поэтому я думаю, что мне нужно пойти и извлечь эти элементы.
Да, из ошибки кажется, что источник столбца содержит словарь
Подсказка к решению указана в ошибке, я просто не понял ошибку. Данные имели формат
id, origin
'someIdentifier', '{'id':'someNonUniqueIdentifer'}'
Таким образом, решение состоит в том, чтобы извлечь значение «id» в пределах одного элемента dict внутри фрейма данных, например
df3['new_origin'] = [x['id'] for x in df3['origin']]
теперь команда
df3.groupby(['new_origin']).count() works exactly as required.
Спасибо всем за помощь.
Не могли бы вы показать свои данные?