일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- dataframe
- PySpark
- Apache
- Excel
- Java
- array
- Google Spreadsheet
- Python
- Kotlin
- hive
- Google Excel
- PostgreSQL
- SQL
- list
- django
- PANDAS
- Redshift
- c#
- google apps script
- GIT
- Mac
- Tkinter
- string
- 파이썬
- Github
- matplotlib
- math
- gas
- numpy
- Today
- Total
달나라 노트
Python Pandas : to_dict (DataFrame을 dictionary로 변환하기, Series를 dictionary로 변환하기, DataFrame dictionary 변환, Series dictionary 변환) 본문
Python Pandas : to_dict (DataFrame을 dictionary로 변환하기, Series를 dictionary로 변환하기, DataFrame dictionary 변환, Series dictionary 변환)
CosmosProject 2021. 7. 15. 00:44
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의 형태로 묶여서 출력됩니다.