#python #json #pandas
#python #json #pandas
Вопрос:
Я считываю некоторые данные из объекта json, а затем преобразую их в фрейм данных с помощью pandas.to_json(). После того, как я сделаю это, я хочу выполнить агрегацию по результирующему фрейму данных, подсчитав количество значений по определенной переменной. Вот краткое описание типа данных фрейма данных.
df3.types
id object
origin object
dtype: object
Когда я пытаюсь выполнить
df3.groupby(['origin']).count()
Но это приводит к ошибке
TypeError: unhashable type: 'dict'
Я не совсем понимаю, как поступить.
Я пытался явно преобразовать как id, так и origin в строки, но это меня ни к чему не привело. В R я бы просто преобразовал origin в factor, а в SQL это было бы проще простого. Кто-нибудь может дать мне предложение о том, как действовать дальше?
Комментарии:
1. Не могли бы вы показать свои данные?
2. Нет, даже если я хэширую значения — строго дословно. Я мог бы создать полностью синтетические данные, если это поможет, но первый столбец содержит только уникальные строковые значения (гарантированно уникальные каждый раз), а второй столбец — нет. Тем не менее, я только что заметил, что origin на самом деле является одним dict — чего я раньше не замечал — поэтому я думаю, что мне нужно пойти и извлечь эти элементы.
3. Да, из-за ошибки кажется, что источник столбца содержит словарь
Ответ №1:
Ключ к решению указан в ошибке, я просто не понял ошибку. Данные имели формат
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.
Спасибо всем за помощь.