달나라 노트

Python Pandas : to_dict (DataFrame을 dictionary로 변환하기, Series를 dictionary로 변환하기, DataFrame dictionary 변환, Series dictionary 변환) 본문

Python/Python Pandas

Python Pandas : to_dict (DataFrame을 dictionary로 변환하기, Series를 dictionary로 변환하기, DataFrame dictionary 변환, Series dictionary 변환)

CosmosProject 2021. 7. 15. 00:44
728x90
반응형

 

 

 

pandas의 to_dict는 DataFrame에 적용하여 DataFrame을 dictionary로 변경해줍니다.

 

 

import pandas as pd

dict_1 = {
    'col1': [1, 2, 3, 4, 5],
    'col2': [6, 7, 8, 9, 10],
    'col3': [11, 12, 13, 14, 15]
}

df_1 = pd.DataFrame(dict_1)
print(df_1)

dict_1 = df_1.to_dict()
print(dict_1)



-- Result
   col1  col2  col3
0     1     6    11
1     2     7    12
2     3     8    13
3     4     9    14
4     5    10    15

{'col1': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'col2': {0: 6, 1: 7, 2: 8, 3: 9, 4: 10}, 'col3': {0: 11, 1: 12, 2: 13, 3: 14, 4: 15}}

위처럼 to_dict를 적용하면

원본 DataFrame(df_1)의 column이 dictionary의 가장 상단 key가 되며

각 column별로 index가 key, 그에 대한 값이 value로 존재하는 dictionary로 변환됩니다.

 

 

 

 

 

import pandas as pd

dict_test = {
    'col1': [1, 2, 3, 4, 5],
    'col2': ['a', 'b', 'c', 'd', 'e'],
    'col3': ['Apple', 'Banana', 'Watermelon', 'Grape', 'Melon']
}
df_test = pd.DataFrame(dict_test)
print(df_test)

dict_converted = df_test.to_dict()
print(dict_converted)



-- Result
   col1 col2        col3
0     1    a       Apple
1     2    b      Banana
2     3    c  Watermelon
3     4    d       Grape
4     5    e       Melon

{'col1': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'col2': {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}, 'col3': {0: 'Apple', 1: 'Banana', 2: 'Watermelon', 3: 'Grape', 4: 'Melon'}}

또 다른 예시를 보면 위와 같습니다.

 

 

 

 

import pandas as pd

dict_test = {
    'col1': [1, 2, 3, 4, 5],
    'col2': ['a', 'b', 'c', 'd', 'e'],
    'col3': ['Apple', 'Banana', 'Watermelon', 'Grape', 'Melon']
}
df_test = pd.DataFrame(dict_test)

sr_test = df_test.loc[:, 'col1']
print(sr_test)
print(type(sr_test))

dict_converted = sr_test.to_dict()
print(dict_converted)



-- Result
0    1
1    2
2    3
3    4
4    5
Name: col1, dtype: int64
<class 'pandas.core.series.Series'>

{0: 1, 1: 2, 2: 3, 3: 4, 4: 5}

to_dict method는 Series에도 적용할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

그러면 만약 index가 한 줄이 아닌 두 줄인 DataFrame에 to_dict를 적용하면 어떻게될까요?

아래 예시를 봅시다.

 

import pandas as pd

dict_1 = {
    'col1': [1, 2, 3, 4, 5],
    'col2': [6, 7, 8, 9, 10],
    'col3': [11, 12, 13, 14, 15]
}

df_1 = pd.DataFrame(dict_1)
print(df_1)

df_1 = df_1.set_index(keys=['col1', 'col2'], drop=False, inplace=False)
print(df_1)

to_dict_1 = df_1.to_dict()
print(to_dict_1)



-- Result
   col1  col2  col3
0     1     6    11
1     2     7    12
2     3     8    13
3     4     9    14
4     5    10    15

           col1  col2  col3
col1 col2                  
1    6        1     6    11
2    7        2     7    12
3    8        3     8    13
4    9        4     9    14
5    10       5    10    15

{'col1': {(1, 6): 1, (2, 7): 2, (3, 8): 3, (4, 9): 4, (5, 10): 5}, 'col2': {(1, 6): 6, (2, 7): 7, (3, 8): 8, (4, 9): 9, (5, 10): 10}, 'col3': {(1, 6): 11, (2, 7): 12, (3, 8): 13, (4, 9): 14, (5, 10): 15}}

 

먼저 set_index를 적용하여 index를 col1, col2 2줄로 만들어줬습니다.

그리고 여기에 to_dict를 적용하였습니다.

 

{'col1': {(1, 6): 1, (2, 7): 2, (3, 8): 3, (4, 9): 4, (5, 10): 5}, ...

 

결과 중 일부를 보면 당연히 dictionary가 반환되었습니다.

먼저 column name이 가장 바깥쪽의 key는 col1인 것으로 보아 column name이 가장 바깥쪽의 key가 된다는 것은 동일합니다.

또한 col1에 대응되는 내부 dictionary를 보면 아래와 같습니다.

 

{(1, 6): 1, (2, 7): 2, (3, 8): 3, (4, 9): 4, (5, 10): 5}, ...

 

(1, 6) --> 이건 index를 의미합니다.

여기서 (1, 6): 1은 col1 컬럼에서 index = 1, 6인 값이 1이라는 것을 의미합니다.

따라서 여러 줄의 index가 Tuple의 형태로 묶여서 나타나는 것이죠.

 

이렇게 column이 가장 상단의 key가 되며

각 column에 존재하는 { index: value } pair가 하위 dictionary로 변형되게 되죠.

 

다만 column name이 2중 3중으로 되어있거나

index가 2중 3중(2줄 3줄) 등으로 되어있다면 그 값들은 결과 dictionary의 key에 Tuple의 형태로 묶여서 출력됩니다.

 

 

 

 

 

 

728x90
반응형
Comments