파이썬 pandas의 apply 메소드를 사용하여 사용자 정의 함수를 적용하는 방법은?
_____`apply`는 DataFrame이나 Series에 사용자 정의 함수나 내장 함수를 각 행(row) 또는 각 열(column)에 적용할 수 있는 메서드입니다. 복잡한 데이터 변환 작업을 간결하게 수행할 수 있습니다.
Q2: `apply` 메서드를 사용하는 기본 문법은 어떻게 되나요?
- DataFrame: `df.apply(func, axis=0 or 1)`
- Series: `series.apply(func)`
`func`는 적용할 함수이고, `axis=0`은 열 단위, `axis=1`은 행 단위로 함수를 적용합니다. (DataFrame에만 해당)
Q3: 사용자 정의 함수를 `apply`에 적용하는 예시는?
```python
import pandas as pd
def square(x):
return x * x
Series에 적용
s = pd.Series([1, 2, 3, 4])
squared = s.apply(square)
DataFrame에 적용 (각 열에 적용, axis=0)
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
df_squared_cols = df.apply(square, axis=0)
DataFrame 행에 함수 적용 (axis=1)
def sum_row(row):
return row['A'] + row['B']
df['sum'] = df.apply(sum_row, axis=1)
```
Q4: `apply`에 익명 함수(lambda`를 쓸 수 있나요?
네, 자주 사용됩니다.
```python
df['A_squared'] = df['A'].apply(lambda x: x 2)
```
Q5: `apply` 함수에 추가 인자를 넘기는 방법은?
`apply`는 함수 뒤에 `args` 키워드 인자를 지원합니다. 예:
```python
def power(x, p):
return x p
df['A_pow'] = df['A'].apply(power, p=3)
```
Q6: DataFrame `apply`에서 `axis` 옵션의 의미는?
- `axis=0` 또는 `axis='index'`: 함수를 각 열(column)에 적용 (Series 타입이 함수에 전달)
- `axis=1` 또는 `axis='columns'`: 함수를 각 행(row)에 적용 (행 Series가 함수에 전달)
Q7: `apply` 함수 결과가 여러 값(시리즈 또는 리스트)일 때는?
결과가 같은 길이의 시리즈 혹은 리스트를 반환하면, DataFrame의 여러 컬럼으로 확장됩니다.
```python
def split_name(full_name):
first, last = full_name.split()
return pd.Series([first, last])
df[['first_name', 'last_name']] = df['name'].apply(split_name)
```
Q8: 성능상의 `apply` 주의점은?
- `apply`는 내부 루프를 파이썬 레벨에서 돌기 때문에 매우 큰 데이터에는 느릴 수 있습니다.
- 벡터화 연산이나 pandas 내장 함수를 우선적으로 사용하는 것이 좋습니다.
- 복잡한 행/열 단위 변환이 필요할 때만 사용하세요.
Q9: DataFrame과 Series `apply` 차이점은?
- Series `apply`는 각 원소(값)에 대해 함수를 적용한다.
- DataFrame `apply`는 각 행 혹은 각 열에 대해 Series 객체로 함수를 적용한다.
Q10: 예외 처리 등 조건부 로직을 넣을 수 있나요?
네, 사용자 정의 함수 내에 자유롭게 조건문이나 예외처리를 할 수 있습니다.
```python
def safe_divide(x):
try:
return 10 / x
except ZeroDivisionError:
return None
df['result'] = df['A'].apply(safe_divide)
```
---
요약: pandas `apply` 메소드는 DataFrame의 각 행 혹은 열, 또는 Series의 각 원소별로 사용자 정의 함수(또는 람다)를 적용하는 편리한 수단입니다. `axis` 파라미터를 통해 적용 방향을 지정하고, 함수 인자 전달과 반환값 형태에 주의하면 다양한 데이터 변환 작업에 유용하게 활용할 수 있습니다.
이 메소드는 데이터 처리 및 변환 작업을 수행할 때 매우 유용합니다.
아래에서 `apply` 메소드를 사용하는 방법에 대해 자세히 설명하겠습니다.
기본 사용법 1. DataFrame에 적용하기 DataFrame의 각 열(column) 또는 행(row)에 함수를 적용할 수 있습니다.
기본적으로 `apply`는 열 방향(axis=0)으로 작동하지만, 행 방향(즉, axis=1)으로 설정할 수도 있습니다.
```python import pandas as pd 샘플 DataFrame 생성 df = pd.DataFrame({ 'A': [1, 2, 3], 'B': [4, 5, 6] }) 사용자 정의 함수 정의 def square(x): return x 2 각 열에 함수 적용 df_squared = df.apply(square) print(df_squared) ```
2. Series에 적용하기 Series 객체에도 동일한 방법으로 함수를 적용할 수 있습니다.
```python import pandas as pd 샘플 Series 생성 s = pd.Series([1, 2, 3, 4]) 사용자 정의 함수 def triple(x): return x * 3 Series에 함수 적용 s_tripled = s.apply(triple) print(s_tripled) ``` `axis` 파라미터 - `axis=0` (또는 `axis='index'`): 각 열에 대해 함수를 적용합니다.
- `axis=1` (또는 `axis='columns'`): 각 행에 대해 함수를 적용합니다.
추가 인자 전달 `apply` 메소드에 함수를 적용할 때 추가 인자를 넘겨줄 수도 있습니다.
```python import pandas as pd 샘플 DataFrame 생성 df = pd.DataFrame({ 'A': [1, 2, 3], 'B': [4, 5, 6] }) 사용자 정의 함수 (추가 인자 포함) def add_constant(x, const): return x + const 각 열에 사용자 정의 함수 적용 (추가 인자 전달) df_with_const = df.apply(add_constant, const=
10) print(df_with_const) ``` 조건부 로직 포함하기 사용자 정의 함수 내에서 조건부 논리를 추가하여 각 요소에 대해 복잡한 변형을 수행할 수 있습니다.
```python import pandas as pd 샘플 DataFrame 생성 df = pd.DataFrame({ 'A': [5, 6, 7], 'B': [8, 9, 10] }) 조건부 로직을 포함하는 사용자 정의 함수 def categorize(x): if x < 8: return 'Low' else: return 'High' DataFrame의 각 요소에 함수 적용 df_categorized = df.applymap(categorize) applymap()은 DataFrame의 각 요소에 함수 적용 print(df_categorized) ``` 결론 `pandas`의 `apply` 메소드는 사용자 정의 함수를 쉽게 적용할 수 있는 방법을 제공하여 데이터 처리를 유연하게 만들어 줍니다.
적절히 사용하면 데이터 변환, 집계 및 비교 분석을 손쉽게 수행할 수 있습니다.
작성자:
최민준 [비회원]
| 작성일자: 1년 전
2025-02-10 05:31:32
조회수: 130 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 130 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.