Pandas에서 사용자 정의 함수를 적용하는 것은 데이터 처리와 분석의 유연성을 크게 높여줍니다. 주로 `apply()`, `applymap()`, 그리고 `map()` 메서드를 사용하여 사용자 정의 함수를 적용할 수 있습니다.
Series에 함수 적용
apply() 메서드 사용
# python
import pandas as pd
import numpy as np
s = pd.Series([1, 2, 3, 4, 5])
def square(x):
return x ** 2
# apply() 사용
squared = s.apply(square)
print(squared)
# 람다 함수 사용
cubed = s.apply(lambda x: x ** 3)
print(cubed)
#
map() 메서드 사용
# python
# 딕셔너리를 이용한 매핑
grade_map = {1: 'F', 2: 'D', 3: 'C', 4: 'B', 5: 'A'}
grades = s.map(grade_map)
print(grades)
# 함수를 이용한 매핑
def grade_function(x):
if x >= 4:
return 'Pass'
else:
return 'Fail'
result = s.map(grade_function)
print(result)
#
DataFrame에 함수 적용
apply() 메서드 사용
# python
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# 열 단위로 함수 적용
def column_sum(col):
return col.sum()
column_sums = df.apply(column_sum)
print(column_sums)
# 행 단위로 함수 적용
row_sums = df.apply(sum, axis=1)
print(row_sums)
# 복잡한 함수 적용
def complex_func(row):
return pd.Series({'sum': row.sum(), 'mean': row.mean(), 'max': row.max()})
result = df.apply(complex_func, axis=1)
print(result)
#
applymap() 메서드 사용
#:python
# 모든 요소에 함수 적용
def format_func(x):
return f"{x:.2f}"
formatted_df = df.applymap(format_func)
print(formatted_df)
#
그룹화된 데이터에 함수 적용
# python
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar'],
'B': [1, 2, 3, 4, 5, 6],
'C': [2.0, 5., 8., 1., 2., 9.]
})
# 그룹별 사용자 정의 함수 적용
def custom_agg(group):
return pd.Series({
'B_sum': group['B'].sum(),
'C_mean': group['C'].mean(),
'B_first': group['B'].iloc[0]
})
result = df.groupby('A').apply(custom_agg)
print(result)
#
조건부 함수 적용
# python
def condition_func(x):
if x > 3:
return x * 2
else:
return x
# numpy.where 사용
df['D'] = np.where(df['B'] > 3, df['B'] * 2, df['B'])
# apply와 lambda 함수 사용
df['E'] = df['B'].apply(lambda x: x * 2 if x > 3 else x)
#
이러한 방법들을 사용하면 복잡한 데이터 처리 로직을 Pandas DataFrame과 Series에 쉽게 적용할 수 있습니다. 사용자 정의 함수를 통해 데이터 변환, 계산, 필터링 등 다양한 작업을 수행할 수 있으며, 이는 데이터 분석의 유연성과 효율성을 크게 향상시킵니다.
#파이썬 #Python #데이터분석 #dataanalysis #사용자정의함수 #pandas #apply #custom-functions #lambdafunctions #map #lambda
0 댓글