toolkit, python, 

Sooftware Pandas - 다중 딕셔너리를 Pandas DataFrame으로!

Sooftware Pandas - 다중 딕셔너리를 Pandas DataFrame으로!

Sooftware Pandas - 다중 딕셔너리를 Pandas DataFrame으로!

가끔 데이터를 요렇게 저렇게 정리하다가보면, 데이터를 멀티인덱싱(Multi-Indexing) 형식으로 정리해야 깔끔해지는 경우가 종종 있다. 예를 들면 아래와 같은 딕셔너리 형태의 데이터는 딕셔너리 형태로 놓고 보면 한 눈에 구조를 파악하기 쉽지 않다.

data = {
 'A': {
   'A': {0: 1410, 1: 290, 2: 278},
   'B': {0: 292, 1: 652, 2: 1034},
   'C': {0: 65, 1: 96, 2: 1817},
   'D': {0: 186, 1: 181, 2: 1611},
   'E': {0: 271, 1: 297, 2: 1410}},
 'B': {
   'A': {0: 1676, 1: 282, 2: 20},
   'B': {0: 274, 1: 869, 2: 835},
   'C': {0: 3, 1: 112, 2: 1863},
   'D': {0: 216, 1: 912, 2: 850},
   'E': {0: 110, 1: 845, 2: 1023}},
 'C': {
   'A': {0: 1907, 1: 49, 2: 22},
   'B': {0: 1081, 1: 409, 2: 488},
   'C': {0: 48, 1: 199, 2: 1731},
   'D': {0: 496, 1: 338, 2: 1144},
   'E': {0: 743, 1: 504, 2: 731}},
 'D': {
   'A': {0: 628, 1: 1295, 2: 55},
   'B': {0: 1268, 1: 407, 2: 303},
   'C': {0: 175, 1: 245, 2: 1558},
   'D': {0: 1316, 1: 374, 2: 288},
   'E': {0: 1014, 1: 534, 2: 430}}
}

위 딕셔너리를 아래와 같은 형태로 보면 굉장히 보기 편해진다.

image

종종 이렇게 데이터를 정리할 일이 필요한데, 개인적으로 딕셔너리를 DataFrame으로 변환하는 것을 선호해서 기록차 남긴다.

import pandas as pd

data = {
 'A': {
   'A': {0: 1410, 1: 290, 2: 278},
   'B': {0: 292, 1: 652, 2: 1034},
   'C': {0: 65, 1: 96, 2: 1817},
   'D': {0: 186, 1: 181, 2: 1611},
   'E': {0: 271, 1: 297, 2: 1410}},
 'B': {
   'A': {0: 1676, 1: 282, 2: 20},
   'B': {0: 274, 1: 869, 2: 835},
   'C': {0: 3, 1: 112, 2: 1863},
   'D': {0: 216, 1: 912, 2: 850},
   'E': {0: 110, 1: 845, 2: 1023}},
 'C': {
   'A': {0: 1907, 1: 49, 2: 22},
   'B': {0: 1081, 1: 409, 2: 488},
   'C': {0: 48, 1: 199, 2: 1731},
   'D': {0: 496, 1: 338, 2: 1144},
   'E': {0: 743, 1: 504, 2: 731}},
 'D': {
   'A': {0: 628, 1: 1295, 2: 55},
   'B': {0: 1268, 1: 407, 2: 303},
   'C': {0: 175, 1: 245, 2: 1558},
   'D': {0: 1316, 1: 374, 2: 288},
   'E': {0: 1014, 1: 534, 2: 430}}
}

df = pd.DataFrame.from_dict(data, orient="index").stack().to_frame()
df = pd.DataFrame(df[0].values.tolist(), index=df.index)

Subscribe to SOOFTWARE

Get the latest posts delivered right to your inbox