Преобразовать список словарей в Python Dataframe

1

У меня есть список, который я бы хотел преобразовать в dataframe. У меня около 30000 списков в переменной, называемой данными. как преобразовать это в dataframe со свойствами столбцов, product_id, description, ustomer_id и страной. Я хочу, чтобы свойства элемента были преобразованы в dataframe

data[0]
Out[16]: 
 {'event': 'Product',
     'properties': {'invoice_no': '44',
      'product_id': '67',
      'description': 'cloth',
      'customer_id': 55,
      'country': 'US'}}


data[1]
 Out[17]: 
    {'event': 'Product',
     'properties': {'invoice_no': '55',
      'product_id': '66',
      'description': 'shoe',
      'customer_id': 23,
      'country': 'China'}}

Пробовал это,

new = pd.DataFrame.from_dict(data)

но он дал только два столбца, такие как "событие" и "свойства". Я хочу, чтобы свойства формировали фрейм данных

Теги:
dataframe
list
python-3.x
dictionary

2 ответа

1
Лучший ответ

Используя небольшой пример:

>>> from pprint import pprint
>>> pprint(data)
[{'event': 'Product',
  'properties': {'country': 'US',
                 'customer_id': 55,
                 'description': 'cloth',
                 'invoice_no': '44',
                 'product_id': '67'}},
 {'event': 'Product',
  'properties': {'country': 'China',
                 'customer_id': 23,
                 'description': 'shoe',
                 'invoice_no': '55',
                 'product_id': '66'}}]

Вы можете просто использовать выражение генератора для преобразования вашего dict в соответствующую форму:

>>> pd.DataFrame(d['properties'] for d in data)
  country  customer_id description invoice_no product_id
0      US           55       cloth         44         67
1   China           23        shoe         55         66
0

Вы также можете сделать:

from pandas.io.json import json_normalize
import pandas as pd
resultDf = pd.DataFrame()

for dictionary in data:
    for key, value in dictionary.items():

        if key == 'properties':
            df = json_normalize(value)
            resultDf = resultDf.append(df)

print(resultDf) дает:

  country  customer_id description invoice_no product_id
0      US           55       cloth         44         67
1   China           23        shoe         55         66

Ещё вопросы

Сообщество Overcoder
Наверх
Меню