매번 헷갈리는 pandas dataframe의 itertuples, iterrows 에 대한 비교를 해보자
둘다 Pansdas DataFrame을 행 단위로 반복처리하는 목적으로 사용하는데,
사용법이 약간 다르기 때문에, 매번 헷갈린다 ㅎ
이번 포스팅은 이것에 대한 사용법과 성능 비교를 목적으로 한다
사용법 차이
아래는 iterrows, itertuples의 sample 코드이다.
import pandas as pd
data = pd.DataFrame({'a': range(100000), 'b': range(100000)})
#iterrows
for row in data.iterrows():
print('row:', row)
# print('key:', row[0], 'val:', row[1])
break
for k, v in data.iterrows():
print('key', k, 'val', v)
break
#itertuples
for t in data.itertuples():
print("tuple", t)
break
for i, a, b in data.itertuples():
print('index: ', i, 'a:', a, 'b:', b)
break
먼저 iterrows 는
반복문에서 아래 형태로 값을 저장할 수 있다
- 행 전체 (row) - for row in data.iterrows():
- key, value - for k, v in data.iterrows():
인덱스와 특정 값에 접근하는 방법이다
- 인덱스 접근: row[0], key
- a 값 접근: row[1].a, row[1]['a'], key.a, key['a']
itertuples는
반복문에서 아래 형태로 값을 저장할 수 있다.
- 행 전체 (tuple) - for t in data.itertuples():
- index, a, b - for i, a, b in data.itertuples():
인덱스와 특정 값에 접근하는 방법이다
- 인덱스 접근: tuple.Index, index
- a 값 접근: tuple.a, a
성능차이
notebook 에서 %time magic command 를 활용해 측정해 봤다.
%%time
nums=10000
c = []
for _, val in data[:nums].iterrows():
c.append(val.a + val.b)
- num=10000: 863ms
- num=50000: 4.25s
%%time
nums=10000
c = []
for i, a, b in data[:nums].itertuples():
c.append(a + b)
- num=10000: 11.6ms
- num=50000: 51.3ms
itertuple 이 약 80배 정도 성능이 좋고 (앞으로 itertuple만 쓰는걸로...ㅎㅎ)
데이터가 5배 증가했을때, iterrows, itertuples 모두 동일하게 5배 시간이 오래걸렸다.
반응형
'IT > Python' 카테고리의 다른 글
파이썬 셀레니움 find_element_by, find_elements_by 정리 (python selenium) (0) | 2021.01.22 |
---|---|
파이썬 assert, raise 차이점 (2) | 2021.01.12 |