Pandas DataFrame을 딕셔너리로 변환하는 방법
to_dict() 메서드 사용
Pandas DataFrame에는 to_dict()
메서드가 있으며, 이를 사용하여 딕셔너리를 간편하게 생성할 수 있습니다.
import pandas as pd
# 예시 데이터 생성
data = {'name': ['John', 'Jane', 'Peter'], 'age': [30, 25, 22], 'city': ['New York', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)
# DataFrame을 딕셔너리로 변환
df_dict = df.to_dict()
print(df_dict)
결과:
{'name': ['John', 'Jane', 'Peter'], 'age': [30, 25, 22], 'city': ['New York', 'Chicago', 'Los Angeles']}
to_dict()
메서드는 기본적으로 각 열을 키로, 각 행의 데이터를 값으로 갖는 딕셔너리를 반환합니다.
옵션 사용:
to_dict()
메서드는 여러 옵션을 사용하여 변환 결과를 원하는 형태로 조정할 수 있습니다.
orient
: 'records' 옵션을 사용하면 각 행을 딕셔너리 형태로 변환하여 리스트에 담아 반환합니다.orient='index'
옵션을 사용하면 인덱스를 딕셔너리의 키로 사용합니다.columns
: 변환에 사용할 컬럼을 지정할 수 있습니다.
# 'records' 옵션 사용
df_dict_records = df.to_dict(orient='records')
print(df_dict_records)
# 'index' 옵션 사용
df_dict_index = df.to_dict(orient='index')
print(df_dict_index)
# 특정 열만 변환
df_dict_subset = df[['name', 'age']].to_dict()
print(df_dict_subset)
직접 변환하기
to_dict()
메서드를 사용하지 않고 직접 for 루프를 사용하여 DataFrame을 딕셔너리로 변환할 수도 있습니다.
# 직접 변환
df_dict = {}
for i in range(len(df)):
row_dict = {}
for col in df.columns:
row_dict[col] = df.loc[i, col]
df_dict[i] = row_dict
print(df_dict)
주의:
to_dict()
메서드를 사용하는 것이 일반적으로 더 간편하고 효율적입니다.- 직접 변환하는 방법은 특정 상황에서 더 유연한 제어가 필요할 때 사용할 수 있습니다.
예제 코드: Pandas DataFrame을 딕셔너리로 변환
import pandas as pd
# 예시 데이터 생성
data = {'name': ['John', 'Jane', 'Peter'], 'age': [30, 25, 22], 'city': ['New York', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)
# 기본 변환 (각 열을 키로, 각 행의 데이터를 값으로 변환)
df_dict = df.to_dict()
print(df_dict)
# 'records' 옵션 사용 (각 행을 딕셔너리 형태로 변환하여 리스트에 담아 반환)
df_dict_records = df.to_dict(orient='records')
print(df_dict_records)
# 'index' 옵션 사용 (인덱스를 딕셔너리의 키로 사용)
df_dict_index = df.to_dict(orient='index')
print(df_dict_index)
# 특정 열만 변환
df_dict_subset = df[['name', 'age']].to_dict()
print(df_dict_subset)
import pandas as pd
# 예시 데이터 생성
data = {'name': ['John', 'Jane', 'Peter'], 'age': [30, 25, 22], 'city': ['New York', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)
# 직접 변환
df_dict = {}
for i in range(len(df)):
row_dict = {}
for col in df.columns:
row_dict[col] = df.loc[i, col]
df_dict[i] = row_dict
print(df_dict)
설명:
- 첫 번째 코드는
to_dict()
메서드를 사용하여 다양한 방식으로 DataFrame을 딕셔너리로 변환합니다.- 기본 변환은 각 열을 키로 하고, 각 행의 데이터를 값으로 하는 딕셔너리를 반환합니다.
- 특정 열만 변환하려면
columns
인수를 사용합니다.
- 두 번째 코드는 직접 for 루프를 사용하여 DataFrame을 딕셔너리로 변환합니다.
Pandas DataFrame을 딕셔너리로 변환하는 대체 방법
apply() 메서드 사용
apply()
메서드를 사용하여 각 행을 딕셔너리로 변환하는 함수를 직접 정의할 수 있습니다.
import pandas as pd
# 예시 데이터 생성
data = {'name': ['John', 'Jane', 'Peter'], 'age': [30, 25, 22], 'city': ['New York', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)
# 각 행을 딕셔너리로 변환하는 함수 정의
def row_to_dict(row):
row_dict = {}
for col, val in row.items():
row_dict[col] = val
return row_dict
# apply() 메서드 사용
df_dict = df.apply(row_to_dict, axis=1)
print(df_dict)
zip() 함수와 dict() 함수 사용
zip()
함수와 dict()
함수를 사용하여 열 이름과 데이터를 쌍으로 연결한 다음 딕셔너리로 변환할 수 있습니다.
import pandas as pd
# 예시 데이터 생성
data = {'name': ['John', 'Jane', 'Peter'], 'age': [30, 25, 22], 'city': ['New York', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)
# zip() 함수와 dict() 함수 사용
df_dict = dict(zip(df.columns, df.values))
print(df_dict)
itertuples() 함수 사용
itertuples()
함수를 사용하여 DataFrame을 튜플의 시퀀스로 반환한 다음 각 튜플을 딕셔너리로 변환할 수 있습니다.
import pandas as pd
# 예시 데이터 생성
data = {'name': ['John', 'Jane', 'Peter'], 'age': [30, 25, 22], 'city': ['New York', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)
# itertuples() 함수 사용
df_dict = [dict(row) for row in df.itertuples()]
print(df_dict)
주의 사항:
- 위에 제시된 방법들은 모두
to_dict()
메서드보다 느릴 수 있습니다. - 특정 상황에서 더 유연한 제어가 필요할 때만 사용하는 것이 좋습니다.
python pandas dictionary