본문 바로가기
Python/Python FAQ

Python 판다스에서 데이터프레임의 행을 반복하는 방법, How to iterate over rows in a DataFrame in Pandas

by 베타코드 2023. 5. 4.
반응형

질문


나는 판다 데이터프레임인 df를 가지고 있습니다:

   c1   c2
0  10  100
1  11  110
2  12  120

이 데이터프레임의 행을 반복하는 방법은 무엇인가요? 각 행마다 열의 이름으로 그 요소(셀의 값)에 액세스하려고 합니다. 예를 들어:

for row in df.rows:
    print(row['c1'], row['c2'])

나는 비슷한 질문을 찾았는데, 다음 중 하나를 사용하는 것을 제안합니다:

  • for date, row in df.T.iteritems():
    
  • for row in df.iterrows():
    

하지만 나는 row 객체가 무엇이고 어떻게 작업할 수 있는지 이해하지 못합니다.


답변


DataFrame.iterrows은 인덱스와 행(시리즈 형태) 모두를 생성하는 제너레이터입니다:

import pandas as pd

df = pd.DataFrame({'c1': [10, 11, 12], 'c2': [100, 110, 120]})
df = df.reset_index()  # 인덱스가 행 수와 일치하도록 설정

for index, row in df.iterrows():
    print(row['c1'], row['c2'])
10 100
11 110
12 120

문서에서 필수적인 주의사항

pandas 객체를 반복하는 것은 일반적으로 느립니다. 많은 경우, 행을 수동으로 반복하는 것이 필요하지 않으며, 다음 접근 방법 중 하나로 피할 수 있습니다:

  • 벡터화된 솔루션을 찾으세요: 많은 작업은 내장 메소드나 NumPy 함수, (부울) 색인 등을 사용하여 수행할 수 있습니다.
  • 전체 DataFrame/Series에서 작동할 수 없는 함수가 있는 경우, 값을 반복하는 대신 apply()를 사용하는 것이 좋습니다. 함수 적용에 대한 문서를 참조하세요.
  • 값에 대해 반복적인 조작이 필요하지만 성능이 중요한 경우, 내부 루프를 cython이나 numba로 작성하는 것이 고려됩니다. 이 접근 방법의 예는 성능 향상 섹션을 참조하세요.

이 스레드의 다른 답변들은 iter* 함수 대체 방법에 대해 더 깊이 파고들어 알아보실 수 있습니다.

반응형

댓글