콘텐츠로 건너뛰기

판다스 iterrows 예제의 쉬운 방법으로 초보자를 위한 가이드.

[

판다스 iterrows 예제

판다스(Pandas)는 파이썬에서 데이터 조작과 분석을 위한 강력하고 유용한 도구입니다. 이번 튜토리얼에서는 판다스의 iterrows 예제에 대해 상세히 알아보겠습니다. iterrows는 데이터프레임의 각 행에 대해 반복 작업을 수행할 때 사용됩니다. 이 예제에서는 iterrows를 사용하여 데이터프레임의 행을 하나씩 조회하고 조작하는 방법을 배울 것입니다.

요약

이 튜토리얼에서는 판다스의 iterrows 메서드를 사용하여 데이터프레임의 행에 대한 반복 접근 방법을 배웁니다. iterrows를 사용하면 데이터프레임의 각 행의 인덱스와 데이터를 함께 접근할 수 있습니다. 이를 통해 각 행에 대해 원하는 작업을 수행할 수 있습니다.

1. iterrows 메서드 소개

iterrows 메서드는 데이터프레임의 각 행에 대해 반복 작업을 수행할 수 있도록 해줍니다. 이 메서드는 (인덱스, 행 데이터)의 형태로 각 행을 반환합니다. 예를 들어, 다음과 같은 데이터프레임이 있다고 가정해봅시다.

import pandas as pd
data = {'이름': ['홍길동', '김철수', '이영희'],
'나이': [20, 25, 30],
'성별': ['', '', '']}
df = pd.DataFrame(data)

위 데이터프레임을 이용하여 iterrows 메서드를 적용해보겠습니다.

for index, row in df.iterrows():
print(index, row)

결과적으로 다음과 같이 각 행의 인덱스와 데이터가 출력됩니다.

0 이름 홍길동
나이 20
성별 남
1 이름 김철수
나이 25
성별 남
2 이름 이영희
나이 30
성별 여
dtype: object

2. 행 데이터 접근하기

iterrows를 사용하면 각 행의 인덱스와 데이터를 함께 가져올 수 있습니다. 이를 활용하여 행 데이터를 접근하는 방법을 알아보겠습니다. 다음과 같이 데이터프레임을 정의합니다.

import pandas as pd
data = {'이름': ['홍길동', '김철수', '이영희'],
'나이': [20, 25, 30],
'성별': ['', '', '']}
df = pd.DataFrame(data)

자, 이제 특정 행의 데이터에 접근해보겠습니다.

for index, row in df.iterrows():
print(row['이름'], row['나이'])

위 코드는 각 행의 ‘이름’과 ‘나이’ 열에 접근하여 값을 출력합니다. 따라서 다음과 같이 결과가 출력됩니다.

홍길동 20
김철수 25
이영희 30

3. 행 데이터 조작하기

iterrows를 사용하면 각 행 데이터를 조작할 수도 있습니다. 예를 들어, 다음과 같이 데이터프레임을 정의합니다.

import pandas as pd
data = {'이름': ['홍길동', '김철수', '이영희'],
'나이': [20, 25, 30],
'성별': ['', '', '']}
df = pd.DataFrame(data)

이제 각 행의 ‘나이’ 값을 1씩 증가시키고 싶다고 가정해보겠습니다.

for index, row in df.iterrows():
df.loc[index, '나이'] += 1

위 코드는 각 행의 ‘나이’ 값을 1씩 증가시킵니다. 이후 데이터프레임을 출력하면 다음과 같이 결과가 나타납니다.

print(df)
이름 나이 성별
0 홍길동 21 남
1 김철수 26 남
2 이영희 31 여

4. 데이터프레임에 새로운 열 추가하기

iterrows를 사용하여 데이터프레임에 새로운 열을 추가할 수도 있습니다. 예를 들어, 다음과 같이 데이터프레임을 정의합니다.

import pandas as pd
data = {'이름': ['홍길동', '김철수', '이영희'],
'나이': [20, 25, 30],
'성별': ['', '', '']}
df = pd.DataFrame(data)

이제 각 행의 ‘키’를 추가하고 싶다고 가정해보겠습니다.

for index, row in df.iterrows():
df.loc[index, ''] = ''

위 코드는 각 행의 ‘키’에 빈 문자열을 추가합니다. 이후 데이터프레임을 출력하면 다음과 같이 결과가 나타납니다.

print(df)
이름 나이 성별 키
0 홍길동 20 남
1 김철수 25 남
2 이영희 30 여

5. 조건에 따른 행 필터링하기

iterrows를 사용하여 조건에 따라 특정 행만 필터링할 수도 있습니다. 예를 들어, 다음과 같이 데이터프레임을 정의합니다.

import pandas as pd
data = {'이름': ['홍길동', '김철수', '이영희'],
'나이': [20, 25, 30],
'성별': ['', '', '']}
df = pd.DataFrame(data)

이제 ‘나이’가 25 이상인 행만 필터링하고 싶다고 가정해보겠습니다.

for index, row in df.iterrows():
if row['나이'] >= 25:
print(row)

위 코드는 ‘나이’가 25 이상인 행만 출력합니다. 따라서 다음과 같이 결과가 나타납니다.

이름 김철수
나이 25
성별 남
Name: 1, dtype: object
이름 이영희
나이 30
성별 여
Name: 2, dtype: object

6. iterrows 사용 시 주의사항

iterrows를 사용할 때 주의해야 할 몇 가지 사항이 있습니다. 첫째, iterrows는 행 단위로 데이터에 접근하기 때문에 비교적 느린 속도로 작동할 수 있습니다. 따라서 데이터프레임이 크면 속도에 주의해야 합니다.

둘째, iterrows는 데이터프레임의 인덱스에 대해 액세스할 수 없습니다. 따라서 데이터 프레임의 인덱스가 필요한 작업을 수행해야 할 때는 iterrows를 사용하기보다 다른 방법을 고려해야 합니다.

셋째, iterrows를 사용하는 경우에는 가능한 위치기반 인덱싱을 사용하는 것이 좋습니다. 예를 들어, 위 예제에서 인덱스 대신 위치기반 인덱스를 사용하여 데이터프레임의 특정 행에 접근하는 것이 더 효율적입니다.

7. 예제 코드 실행하기

지금까지 설명한 예제 코드를 실행해보겠습니다. 아래의 코드를 차례대로 실행해보세요.

import pandas as pd
data = {'이름': ['홍길동', '김철수', '이영희'],
'나이': [20, 25, 30],
'성별': ['', '', '']}
df = pd.DataFrame(data)
# 예제 코드 작성
print(df)

위 코드는 특정 연산을 저장하지 않고 출력만 하기 때문에 연속해서 실행해도 결과가 변하지 않습니다. 그러나 실제 작업을 수행하기 위해서는 연산에 대한 결과를 저장하고 활용해야 합니다.

8. 판다스 iterrows 장단점

iterrows 메서드를 사용하는 것에는 몇 가지 장단점이 있습니다.

장점:

  • 간단하고 직관적인 사용법으로 행 단위 작업을 수행할 수 있습니다.
  • 행 데이터를 바로 접근하므로 필요한 작업을 빠르게 수행할 수 있습니다.

단점:

  • 데이터프레임의 크기가 클 경우 속도가 느릴 수 있습니다.
  • 인덱스에 대한 액세스가 불가능합니다.
  • 위치기반 인덱싱을 사용하는 것이 더 효율적인 경우가 있습니다.

9. 판다스 iterrows 예제 활용

iterrows 메서드는 다양한 상황에서 유용하게 활용될 수 있습니다. 예를 들어, 다음과 같은 경우에 사용할 수 있습니다.

  • 특정 조건에 따라 행을 필터링하고 작업을 수행할 때
  • 각 행의 데이터를 조작하거나 새로운 열을 추가할 때
  • 특정 컬럼에 대한 값의 합계, 평균, 최댓값 등을 계산할 때

10. 결론

이번 튜토리얼에서는 판다스의 iterrows 메서드를 사용하여 데이터프레임의 행에 대한 반복 작업 방법을 배웠습니다. iterrows를 사용하면 각 행의 인덱스와 데이터에 직접 접근할 수 있으며, 이를 활용하여 행 데이터를 접근하거나 조작할 수 있습니다. 그러나 iterrows를 사용할 때는 속도와 인덱스 접근에 대한 제약 사항에 주의해야 합니다. 이러한 제약 사항을 고려하여 문제에 적합한 방법을 선택하는 것이 중요합니다.

자주 묻는 질문(FAQs)

Q1: iterrows와 itertuples의 차이는 무엇인가요? A1: iterrows는 (인덱스, 행 데이터) 형태로 각 행을 반복합니다. itertuples는 NamedTuple 형태로 각 행을 반복하며, 속도가 더 빠르고 인덱스에 대한 액세스가 가능합니다.

Q2: iterrows를 사용할 때 속도가 느린 이유는 무엇인가요? A2: iterrows는 데이터프레임의 행을 하나씩 순환하며 인덱스와 데이터를 반환하기 때문에 속도가 느립니다. 이러한 이유로 데이터프레임 크기가 큰 경우 다른 방법을 고려해야 합니다.

Q3: iterrows를 사용하여 데이터프레임의 특정 컬럼 값만 변경할 수 있나요? A3: iterrows는 각 행에 대한 인덱싱을 제공하지 않기 때문에 특정 컬럼 값만 변경하기 어렵습니다. 대신 loc 또는 at을 사용하여 컬럼 값을 변경할 수 있습니다.

Q4: iterrows를 사용하여 데이터프레임의 행을 삭제할 수 있나요? A4: iterrows를 사용하여 데이터프레임의 행을 삭제하는 것은 권장되지 않습니다. 삭제 작업을 하려면 drop 메서드를 사용하는 것이 좋습니다.

Q5: iterrows를 사용하여 데이터프레임을 반복하면 완전한 복제본을 반환하나요? A5: iterrows는 행 데이터의 복제본을 반환하므로 원본 데이터프레임에는 영향을 주지 않습니다.