데이터 분석 작업을 하다 보면 pandas 데이터프레임의 각 행을 OrderedDict 형태로 변환해야 하는 경우가 종종 있습니다. 이 글에서는 데이터프레임의 행들을 튜플 리스트가 포함된 OrderedDict로 변환하여 출력하는 방법을 단계별로 알아보겠습니다.
예를 들어, 다음과 같은 데이터프레임이 있고 이를 OrderedDict로 변환하면 아래와 같은 결과를 얻을 수 있습니다.
OrderedDict([('Index', 0), ('Name', 'Raj'), ('Age', 13), ('City', 'Chennai'), ('Mark', 80)])
OrderedDict([('Index', 1), ('Name', 'Ravi'), ('Age', 12), ('City', 'Delhi'), ('Mark', 90)])
OrderedDict([('Index', 2), ('Name', 'Ram'), ('Age', 13), ('City', 'Chennai'), ('Mark', 95)])해결 방법
이 문제를 해결하기 위해 다음 단계를 순서대로 따라갑니다.
먼저 데이터프레임을 정의합니다.
for 반복문과 함께
df.itertuples()함수를 사용하여 모든 행에 접근합니다. 이때name='stud'옵션을 지정하여 각 행에 이름을 부여할 수 있습니다.
for row in df.itertuples(name='stud')
row._asdict()함수를 사용하여 각 행을 튜플 리스트가 포함된 OrderedDict로 변환하고, 그 결과를 dict_row 변수에 저장한 후 값을 출력합니다.
dict_row = row._asdict() print(dict_row)
예제 코드
아래 전체 코드를 통해 더 자세히 이해해 보겠습니다.
import pandas as pd
Students = [('Raj', 13, 'Chennai', 80) ,
('Ravi', 12, 'Delhi' , 90) ,
('Ram', 13, 'Chennai', 95)]
df = pd.DataFrame(Students, columns=['Name', 'Age', 'City', 'Mark'])
print("DataFrame is:\n",df)
for row in df.itertuples(name='stud'):
dict_row = row._asdict()
print(dict_row)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DataFrame is:
Name Age City Mark
0 Raj 13 Chennai 80
1 Ravi 12 Delhi 90
2 Ram 13 Chennai 95
OrderedDict([('Index', 0), ('Name', 'Raj'), ('Age', 13), ('City', 'Chennai'), ('Mark', 80)])
OrderedDict([('Index', 1), ('Name', 'Ravi'), ('Age', 12), ('City', 'Delhi'), ('Mark', 90)])
OrderedDict([('Index', 2), ('Name', 'Ram'), ('Age', 13), ('City', 'Chennai'), ('Mark', 95)])핵심 포인트 정리
itertuples(): 데이터프레임의 각 행을 네임드튜플(namedtuple) 형태로 순회하는 pandas 내장 함수입니다.
_asdict(): namedtuple 객체를 OrderedDict로 변환하는 메서드로, 열 이름과 값이 튜플 쌍으로 저장됩니다.
Index 항목: 변환 결과에는 데이터프레임의 인덱스 값이 자동으로 'Index' 키와 함께 포함됩니다.
이 방법은 데이터프레임의 행 데이터를 딕셔너리 기반 구조로 직렬화하거나, JSON 변환 등 후속 처리를 수행할 때 매우 유용하게 활용할 수 있습니다.