wisdiom 아니고 wisdom

3. 데이터프레임 응용(1) 본문

👩‍💻/pandas

3. 데이터프레임 응용(1)

글로랴 2021. 1. 31. 18:39

1️⃣ 함수 매핑

함수 매핑은 시리즈 또는 데이터프레임의 개별 원소를 특정 함수에 일대일 대응시키는 과정을 말한다.

사용자가 직접 만든 함수(lambda 함수 포함)를 적용할 수 있기 때문에, 판다스 기본 함수로 처리하기 어려운 복잡한 연산을 판다스 객체에 적용하는 것이 가능하다.

 

📢 Series객체 함수 매핑

📍 Series객체.apply(func)

시리즈 객체에 apply() 메소드를 적용하면, 매핑 함수에 시리즈의 모든 원소를 하나씩 인자로 전달한다.
리턴값으로 같은 시리즈 객체를 받는다.

예시) 

# 사용자 정의 함수
def add_two_obj(a, b):
    return a+b
    
# Series 객체와 숫자에 적용 : 2개의 인수(시리즈 + 숫자)
sr = df['age'].apply(add_two_obj, b=10)

 

 

📢 DataFrame객체에 함수 매핑

📍 DataFrame객체.apply(func, axis=0, raw=False, result_type=None, args=())

 > 데이터프레임의 apply() 메소드를 적용하면 모든 '열' 또는 '행'을 하나씩 분리하여 매핑 함수의 인자로 Series 형태로 전달


- func : mapping function's name

- axis
   - 0 또는 'index' : 각 '열'에 함수 적용
   - 1 또는 'columns' : 각 '행'에 함수 적용

- raw
   - False : 각 행 또는 열을 'Series' 객체로 함수에 전달
   - True : ndarray객체로 함수에 전달

result_type
   - 'expand': list와 같은 결과가 열로 바뀐다.
   - 'reduce' : list와 같은 결과를 시리즈로 반환한다.
   - 'broadcast' : 결과가 DataFrame의 원래 모양으로 반환되고 원래 인덱스와 열이 유지된다.
   - None : 매핑 함수에 따라 반환되는 객체가 다르다.

args : Series / ndarray 외에 함수에 전달한 변수

예시)

# 데이터프레임의 각 '열'에 함수 매핑
# 데이터프레임에 apply(axis=0) 메소드를 적용하면 모든 열에 하나씩 분리하여 매핑 함수의 인자로 각 열(Series)이 전달된다.

# ☝ 시리즈를 입력받아 시리즈를 반환하는 missing_value(series) 함수
# 사용자 정의 함수
def missing_value(series):   # 시리즈를 인자로 전달
    return series.isnull()   # boolen 시리즈를 반환

# DataFrame column에 apply 메소드 적용
result = df.apply(missing_value, axis=0)
print(result.head())
print(type(result)

# ✌ 시리즈의 최대값과 최소값의 차이를 계산하여 값을 반환하는 min_max(x) 함수
# 사용자 함수 정의
def min_max(x):
    return x.max() - x.min()

# DataFrame column에 apply 메소드 적용
result = df.apply(min_max, axis=0)
print(result)
print(type(result)

☝의 결과)

<class 'pandas.core.frame.DataFrame'>

✌의 결과)

<class 'pandas.core.series.Series'>

 

> 💡 결론 🔥

>> 예제☝을 통해, 시리즈를 입력받고 시리즈를 반환하는 함수를 매핑하면, 데이터프레임을 반환한다는 것을 알 수 있다.
실제로 데이터프레임의 열을 매핑 함수에 전달하면 각 열의 리턴값은 시리즈 형태로 반환된다.
그리고 이 시리즈들이 하나의 데이터프레임으로 통합되는 과정을 거친다.

>> 예제✌는 시리즈를 입력받아 '하나의 값'을 반환하는 함수를 매핑하면 시리즈를 반환한다.
이를 통해, 데이터프레임의 각 열을 매핑 함수에 전달하면 각 열의 리턴값은 '하나의 값'으로 반환된다.
마지막으로 이 값들을 하나의 시리즈로 통합하는 과정을 거친다는 것을 알 수 있다.

 

# 데이터프레임의 각 '행'에 함수 매핑
# 데이터프레임의 2개 열에 적용
# x=df, a=df['age'], b=df['ten']
df['add'] = df.apply(lambda x: add_two_obj(x['age'], x['ten']), axis=1)
df.head()

결과)

 

📍 DataFrame객체.applymap(Func)

데이터프레임의 각 개별 원소에 특정 함수를 매핑한다.
리턴값으로 동일한 형태의 데이터프레임을 반환한다.

 

📍 DataFrame객체.pipe(func, args)

데이터프레임 전체를 하나로 보고, 함수를 전체에 매핑한다.
사용하는 함수가 변환하는 리턴값에 따라 반환하는 리턴값이 결정된다.

 

 

💡🚨 결론 🔥🔥

Input Method Output
개별 원소 apply 단일 값, 시리즈
시리즈 객체
(Series, DataFrame 행 또는 열)
단일 값, 시리즈, 데이터프레임
데이터프레임 원소 applymap 데이터프레임
데이터프레임 객체 pipe 단일 값, 시리즈, 데이터프레임

 

반응형

'👩‍💻 > pandas' 카테고리의 다른 글

3. 데이터프레임 응용(3)  (0) 2021.01.31
3. 데이터프레임 응용(2)  (0) 2021.01.31
2. 데이터 사전 처리  (0) 2021.01.27
1. 판다스 자료구조(2)  (0) 2021.01.18
1. 판다스 자료구조(1) - Series, 시리즈  (0) 2021.01.18
Comments