반응형
질문
나는 판다 데이터프레임인 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* 함수 대체 방법에 대해 더 깊이 파고들어 알아보실 수 있습니다.
반응형
댓글