파이썬_dataframe_function_apply_방법_without_iterrrows

파이썬 dataframe 각 row에 function을 apply하는 방법에 대하여.

  • dataframe을 다루다보면 각 행(row)에 대해 특정 값에 대한 결과를 얻거나 과정을 수행하고 싶을 때가 있다.

  • 이럴때 가장먼저 떠오르는것은 pd.iterrows() 였다.

  • 하지만 천만건이 넘어가는 데이터를 다루려 하다보니 iterrows는 너무나 느리다는 것을 알게 되었다.

  • 이를 해결하기 위해 찾아낸 방법이 수행할 작업을 function으로 만들고 각 행에 apply하는 것이다.

  • 간단한 dataframe 을 만들어서 살펴보자.

1
2
3
4
5
6
7
8
9
10
import pandas as pd

rectangles = [
{ 'Name': "A", 'Age': 17 },
{ 'Name': "B", 'Age': 20 },
{ 'Name': "C", 'Age': 27 }
]

rectangles_df = pd.DataFrame(rectangles)
print(rectangles_df)
Name Age
A 17
B 20
C 27
  • 이름과 성별이 주어진 dataframe이 있을 때 각 행을 살펴보며 어떤 사람이 투표권을 행사할 수 있을지 판단해보려고 한다.

  • 각 행을 입력받아 Age 가 18세 이상이라면 True를 그렇지 않다면 False를 반환하는 함수를 만든뒤 datafrmae에 apply한다.

1
2
3
4
5
6
7
8
def vote(row):
if row['Age'] >= 18:
return True
else: return False

rectangles_df["vote"] = rectangles_df.apply(vote, axis=1)

print(rectangles_df)
Name Age vote
A 17 False
B 20 True
C 27 True
  • 위와 같이 각 행의 Age 를 판단해 vote라는 새로운 칼럼을 만들어낸 것을 볼 수 있다.

  • 이와같이 함수를 dataframe에 apply할 때 각 행(row)에 대하여 적용하고 싶다면 df.apply(func, axis=1) 로 axis=1 을 잊지말아야 한다.

  • 위의 예제는 행이 3개라 iterrows로 실습해도 차이를 느낄순 없을것이다. 하지만 데이터 크기가 커질수록 iterrows를 사용하는것은 자제하고 apply를 적용하는 방법을 알아야한다.

  • apply 외에도 몇가지 다른 방법을 알고 싶다면 참고해보자.

#

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×