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

Я читаю некоторые данные из объекта json, а затем преобразовываю их в фрейм данных, используя pandas.to_json(). После того, как я это сделаю, я хочу выполнить агрегацию полученного фрейма данных, подсчитав количество значений по определенной переменной. Вот краткая информация о типе данных фрейма данных.

df3.types
id        object
origin    object
dtype: object

Когда я пытаюсь выполнить

df3.groupby(['origin']).count()

Но это выдает ошибку

TypeError: unhashable type: 'dict'

Я не понимаю, как действовать.

Я пытался явно преобразовать id и origin в строки, но это ни к чему не привело. В R я бы просто преобразовал происхождение в фактор, а в SQL это было бы проще простого. Может ли кто-нибудь дать мне предложение о том, как действовать?

Не могли бы вы показать свои данные?

Dani Mesejo 11.12.2020 23:08

Нет, даже если я хэширую значения — строго запрещено. Я мог бы создать полностью синтетические данные, если это поможет, но первый столбец содержит только уникальные строковые значения (каждый раз гарантированно уникальные), а второй столбец — нет. Тем не менее, я только что заметил, что origin на самом деле является одним диктовщиком, чего я раньше не замечал, поэтому я думаю, что мне нужно пойти и извлечь эти элементы.

Brad Davis 11.12.2020 23:13

Да, из ошибки кажется, что источник столбца содержит словарь

Dani Mesejo 11.12.2020 23:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

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

Другие вопросы по теме