데이터프레임의 특정 컬럼의 값을 일괄 변환해야할 일이 있을 때 apply()함수를 사용하게 된다.
1. 기본 문법
# 라이브러리 호출 부분 생략
def calc_ratio(row):
"""검색량 계산"""
standard_volumn = row['standard_volumn']
standrad_ratio = row['standard_ratio']
ratio = row['ratio']
volume = standard_volumn*ratio/standard_ratio
return volume
# 데이터프레임 생성 부분 생략
result_df['volume'] = result_df.apply(calc_ratio, axis=1)
df.apply부분을 보면 되는데, 변환하고자하는 부분을 함수로 작성하여 파라미터로 보낸다.
그러면 apply에서 각각의 row를 받아와서 함수에 지정한 컬럼의 값들로 계산을 하고 값을 반환한다.
이 값을 이용하여 ['volume']이라는 새로운 컬럼에 저장을 할 수 있다.
하지만 데이터 변환을 진행하다보면 다른 컬럼에 같은 적용을 하고 싶은 경우가 자주 생긴다.
예를 들어 수집된 데이터의 정형화를 위해 공백문자를 제거한다?
근데 각 title/brand/color 등 여러 컬럼에 적용을 하고 싶다는 니즈가 있다면
위 방식으로는 각 컬럼에 맞게 함수를 n번 만들어야 할 것이다.
2. 컬럼을 지정하여 apply
def remove_whitespace(row, column):
"""주어진 컬럼의 공백문자 제거"""
return re.sub(r'\s+', ' ', row[column])
items_df['brand'] = items_df.apply(lambda row: remove_whitespace(row, 'brand'), axis=1)
그래서 이와 같은 방식으로 apply를 사용할 수도 있다.
lambda를 사용해서 row와 지금 사용하고자 하는 컬럼 이름을 파라미터로 보내고
함수에서 컬럼을 지정해서 반환을 해주면 된다.
참고 :
728x90
'프로그래밍 > Python' 카테고리의 다른 글
[OpenCV] 이미지 분석 시작하기 - 유사도 분석 (0) | 2024.02.29 |
---|---|
[OpenCV] 이미지 분석 시작하기 - 창 관리, 그레이스케일 (1) | 2024.02.29 |
[Pandas] Dataframe row 순회하는 법 (0) | 2023.09.13 |
[Pandas] FutureWarning: iteritems is deprecated and will be removed in a future version. Use .items instead. for column, series in pdf.iteritems() 오류 해결 - Pandas 버전 맞추기 (0) | 2023.02.24 |
[Python] 도로명 주소 위도,경도로 전환하기 (지오코딩) (0) | 2022.11.02 |