-
[Pandas] 파이썬 판다스에서 apply 함수 써보기Python/Pandas, Numpy 2023. 7. 6. 17:09반응형
판다스 데이터프레임에서 apply 함수 써보기
파이썬(Python)을 이용한 데이터 분석, 그중에서도 특히 판다스(Pandas)를 이용한 데이터프레임(DataFrame) 자료 처리에서는 데이터의 일괄 변환을 할 일이 많습니다. 붓꽃 데이터(Iris dataset)을 예로 들어보자면, 이파리 길이가 평균보다 클 경우 '크다', 아니면 '작다' 로 입력하는 간단한 작업부터 시작해서, 몇 가지 조건을 복합적으로 고려하는 분류 등이 있습니다. 이 때, 파이썬에서 제공하는 람다(lambda) 함수와 판다스에서 지원하는 apply 함수를 적절하게 이용하면 일괄 변환 등의 작업이 편리하게 이루어질 수 있습니다.
판다스의 apply 함수
판다스에서는 데이터프레임 객체에 대해서
apply
라는 함수를 제공하고 있습니다. 판다스의 공식 설명에 따르면, 데이터프레임의 축을 따라 함수를 적용할 수 있는 기능으로 소개되어 있는데, 파이썬의 특성상 이 함수의 기능에 제한이 없다보니 내가 생각하는 축 방향 계산 및 분류 등을 완벽하게 구현할 수 있는 편리한 함수입니다.파이썬에서는 리스트 컴프리헨션(list comprehension)이나 쿼리(query) 함수 등 apply 함수를 대체할 수 있는 기능을 제공하고 있지만, 반복문이나 특수한 규칙을 사용하지 않는 apply 함수의 편의성은 앞의 두 기능과 다른 강점으로 볼 수 있습니다. 물론, 세 가지 방법 모두 읽을줄은 알아야 데이터 분석에 있어서 불편함이 없으니 참고해 주시기 바랍니다.
판다스 공식 홈페이지의 설명에 따르면, apply 함수는
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
형식으로 쓸 수 있다고 합니다. 우리는 여기서func
부분과axis
부분만 배워서 사용하면 되는데요, 전자는 원하는 기능을 구현하면 되고, 후자는 축 방향을 설정하는 것입니다. 예를 들어서,axis=0
인 경우 각 column 단위로 apply 함수가 사용되며,axis=1
인 경우 각 row 단위로 apply 함수가 사용됩니다.# 패키지 및 데이터 불러오기 from sklearn.datasets import load_iris import pandas as pd iris = load_iris() df_iris = pd.DataFrame(data=iris.data, columns=iris.feature_names) df_iris.head()
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) 0 5.1 3.5 1.4 0.2 1 4.9 3.0 1.4 0.2 2 4.7 3.2 1.3 0.2 3 4.6 3.1 1.5 0.2 4 5.0 3.6 1.4 0.2 이번에 사용해볼 apply 함수는 iris 데이터셋을 이용해 실습해 보도록 하겠습니다. iris 데이터는 sepal length (cm), sepal width (cm), petal length (cm), petal width (cm)의 4가지 요소로 이루어져 있으며, 이는 모두 실수(float) 값이 입력되어 있습니다. 여기서, sepal length (cm)가 평균 이상 또는 미만인 대상을 분류하고 싶다면, apply 함수를 이용해 손쉽게 해결할 수 있습니다.
sepal_length_mean = df_iris['sepal length (cm)'].mean() m = df_iris['sepal length (cm)'].apply(lambda x: x >= sepal_length_mean) m
0 False 1 False 2 False 3 False 4 False ... 145 True 146 True 147 True 148 True 149 True Name: sepal length (cm), Length: 150, dtype: bool
이렇게 하면, sepal length (cm)가 평균 이상인 대상은 True, 미만이라면 False로 반환되는 결과물을 확인할 수 있습니다. 여기서 평균 이상인 대상을 골라서 표로 받아보고 싶다면, 해당 정보를 이용해서 판다스 데이터프레임을 마스킹(masking)할 수 있지요.
df_iris[m]
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) 50 7.0 3.2 4.7 1.4 51 6.4 3.2 4.5 1.5 52 6.9 3.1 4.9 1.5 54 6.5 2.8 4.6 1.5 56 6.3 3.3 4.7 1.6 ... ... ... ... ... 145 6.7 3.0 5.2 2.3 146 6.3 2.5 5.0 1.9 147 6.5 3.0 5.2 2.0 148 6.2 3.4 5.4 2.3 149 5.9 3.0 5.1 1.8 70 rows × 4 columns
만약에 평균 미만인 대상을 추려보고 싶다면, 아까 사용한 apply 함수의 식을 반대로 적어도 되고, 마스킹을 할 때 조건을 반대로 적용해도 됩니다. 마스킹을할 때, 마이너스(-) 기호를 사용한다면
not
의 의미를 가지게 되어 반대로 적용할 수가 있답니다.df_iris[-m]
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) 0 5.1 3.5 1.4 0.2 1 4.9 3.0 1.4 0.2 2 4.7 3.2 1.3 0.2 3 4.6 3.1 1.5 0.2 4 5.0 3.6 1.4 0.2 ... ... ... ... ... 106 4.9 2.5 4.5 1.7 113 5.7 2.5 5.0 2.0 114 5.8 2.8 5.1 2.4 121 5.6 2.8 4.9 2.0 142 5.8 2.7 5.1 1.9 80 rows × 4 columns
반응형'Python > Pandas, Numpy' 카테고리의 다른 글
[Pandas] 데이터프레임에서 값 검색 후 항목 위치 찾아보는법 (0) 2023.07.21 [Pandas] 판다스 데이터프레임을 읽을 때, thousands 패러미터로 숫자 구분자 콤마를 빼보자 (0) 2023.05.18 [Pandas] 판다스 merge 함수로 파이썬 데이터프레임 병합하는 방법 (2) 2023.05.17