Как я могу агрегировать по полям после открытия json l в python pandas

#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.
 

Спасибо всем за помощь.