Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python - Chuyển danh sách nested dictionary thành Pandas DataFrame


Python thường nhận dữ liệu từ nhiều nguồn (CSV, JSON) chuyển thành list/dict. Để phân tích với pandas, cần chuyển thành DataFrame. Bài viết chỉ cách chuyển list chứa nested dict thành DataFrame.

Trích xuất hàng dữ liệu từ nested dict, thêm cột Name, append vào list rows, cuối cùng pd.DataFrame(rows).

Ví dụ

import pandas as pd

data = [
    {
        "Fruit": [{"Price": 15.2, "Quality": "A"}, {"Price": 19, "Quality": "B"}, {"Price": 17.8, "Quality": "C"}],
        "Name": "Orange"
    },
    {
        "Fruit": [{"Price": 23.2, "Quality": "A"}, {"Price": 28, "Quality": "B"}],
        "Name": "Grapes"
    }
]

rows = []
for item in data:
    for row in item['Fruit']:
        row['Name'] = item['Name']
        rows.append(row)

df = pd.DataFrame(rows)
print(df)

Kết quả:

Đầu ra

   Price Quality     Name
0   15.2       A   Orange
1   19.0       B   Orange
2   17.8       C   Orange
3   23.2       A   Grapes
4   28.0       B   Grapes

Áp dụng pivot

Dùng pivot_table để tổ chức lại dữ liệu theo ý muốn.

Ví dụ

import pandas as pd

data = [
    {"Fruit": [{"Price": 15.2, "Quality": "A"}, {"Price": 19, "Quality": "B"}, {"Price": 17.8, "Quality": "C"}], "Name": "Orange"},
    {"Fruit": [{"Price": 23.2, "Quality": "A"}, {"Price": 28, "Quality": "B"}], "Name": "Grapes"}
]

rows = []
for item in data:
    for row in item['Fruit']:
        row['Name'] = item['Name']
        rows.append(row)

df = pd.DataFrame(rows)
df = df.pivot_table(index='Name', columns=['Quality'], values=['Price']).reset_index()
print(df)

Kết quả:

Đầu ra

     Name Price
Quality        A     B     C
0   Grapes  23.2  28.0   NaN
1   Orange  15.2  19.0  17.8