Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python - แปลงรายการพจนานุกรมที่ซ้อนกันเป็น Pandas Dataframe


หลายครั้งที่ python จะได้รับข้อมูลจากแหล่งต่างๆ ซึ่งสามารถอยู่ในรูปแบบต่างๆ เช่น csv, JSON เป็นต้น ซึ่งสามารถแปลงเป็นรายการ python หรือพจนานุกรม เป็นต้น แต่หากต้องการใช้การคำนวณหรือการวิเคราะห์โดยใช้แพ็กเกจ เช่น pandas เราจำเป็นต้องแปลงข้อมูลนี้เป็น ดาต้าเฟรม ในบทความนี้ เราจะมาดูกันว่าเราจะแปลงรายการหลามที่กำหนดซึ่งมีองค์ประกอบเป็นพจนานุกรมที่ซ้อนกันเป็น Datframe ของแพนด้าได้อย่างไร

อันดับแรก เราใช้รายการพจนานุกรมที่ซ้อนกันและแยกแถวของข้อมูลออกมา จากนั้นเราสร้างอีก for loop เพื่อต่อท้ายแถวในรายการใหม่ซึ่งเดิมสร้างว่างเปล่า สุดท้าย เราใช้ฟังก์ชัน DataFrames ในไลบรารีแพนด้าเพื่อสร้าง Data Frame

ตัวอย่าง

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)

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

ผลลัพธ์

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

ใช้เดือย

เรายังใช้ฟังก์ชัน pivot_table เพื่อจัดระเบียบข้อมูลใหม่ได้ตามต้องการ

ตัวอย่าง

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)

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

ผลลัพธ์

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