Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python - 중첩 사전 목록을 Pandas Dataframe으로 변환

<시간/>

여러 번 파이썬은 파이썬 목록이나 사전 등으로 변환할 수 있는 csv, JSON 등과 같은 다양한 형식이 될 수 있는 다양한 소스로부터 데이터를 수신합니다. 그러나 pandas와 같은 패키지를 사용하여 계산 또는 분석을 적용하려면 이 데이터를 다음으로 변환해야 합니다. 데이터 프레임. 이 기사에서는 요소가 중첩 사전인 주어진 python 목록을 pandas Datframe으로 변환하는 방법을 볼 것입니다.

먼저 중첩된 사전 목록을 가져와서 데이터 행을 추출합니다. 그런 다음 원래 비어 있던 새 목록에 행을 추가하는 또 다른 for 루프를 만듭니다. 마지막으로 pandas 라이브러리에 DataFrames 함수를 적용하여 데이터 프레임을 생성합니다.

예시

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