Computer >> Máy Tính >  >> Lập trình >> Python

Python - Chuyển đổi danh sách từ điển lồng nhau thành Khung dữ liệu Pandas

Nhiều lần python sẽ nhận dữ liệu từ nhiều nguồn khác nhau có thể ở các định dạng khác nhau như csv, JSON, v.v. có thể được chuyển đổi thành danh sách python hoặc từ điển, v.v. Nhưng để áp dụng tính toán hoặc phân tích bằng cách sử dụng các gói như gấu trúc, chúng ta cần chuyển đổi dữ liệu này thành một khung dữ liệu. Trong bài viết này, chúng ta sẽ thấy cách chúng ta có thể chuyển đổi một danh sách python đã cho có các phần tử là từ điển lồng nhau, thành Datframe gấu trúc.

Đầu tiên chúng ta lấy danh sách từ điển lồng nhau và trích xuất các hàng dữ liệu từ đó. Sau đó, chúng tôi tạo một vòng lặp for khác để nối các hàng vào danh sách mới mà ban đầu được tạo trống. Cuối cùng, chúng tôi áp dụng hàm DataFrames trong thư viện gấu trúc để tạo Khung dữ liệu.

Ví dụ

import pandas as pd

# Given nested dictionary
list = [
   {
      "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 = []

# Getting rows
for data in list:
   data_row = data['Fruit']
   n = data['Name']

   for row in data_row:
      row['Name'] = n
      rows.append(row)

# Convert to data frame
df = pd.DataFrame(rows)
print(df)

Chạy đoạn mã trên cho chúng ta kết quả sau -

Đầ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

Chúng tôi cũng có thể áp dụng hàm pivot_table để sắp xếp lại dữ liệu theo cách chúng tôi muốn.

Ví dụ

import pandas as pd

# List of nested dictionary initialization
list = [
   {
      "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"
   }
]

#print(list)
rows = []

# appending rows
for data in list:
   data_row = data['Fruit']
   n = data['Name']

   for row in data_row:
      row['Name'] = n
      rows.append(row)

   # using data frame
df = pd.DataFrame(rows)

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

Chạy đoạn mã trên cho chúng ta kết quả sau -

Đầu ra

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