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