일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 방향변경
- 멜버른
- 색상변경
- 너무오래됐다
- OpenGL
- 크롤링
- 언제또가보지
- 청청구역
- 가고싶은데
- 보라카이
- 빅데이터분석기사
- 예쁜곳
- 오류
- 호주
- 빅데이터분석기사후기
- BeautifulSoup
- 데이터전처리
- 갈자신이없다
- 사각형변형
- 정말
- 애니메이션
- 필기후기
- 파이썬
- selenium
- 마우스클릭
- 유니코드 제거
- 빅데이터분석기사필기
Archives
- Today
- Total
wisdiom 아니고 wisdom
3. 데이터프레임 응용(1) 본문
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