map, apply, applymap은 pandas에서 일괄적으로 값을 변경할 때 이용하는 함수로 다음과 같은 차이가 있다.
- apply(): 데이터프레임(DataFrame)과 시리즈(Series)에 모두 적용 가능
- map(): 시리즈(Series)에만 적용 가능
- applymap(): 데이터프레임(DataFrame)에만 적용 가능
[문제 출처]
https://www.datamanim.com/dataset/99_pandas/pandasMain.html#time-series
1. map
(1) 시리즈 기본 형태
df2 = df["컬럼명"].apply(lambda x:x/2)
(2) 문제 풀이 예
Q. Income_Category의 카테고리를 apply 함수를 이용하여 다음과 같이 변경하여 newIncome 컬럼에 매핑하라
dic = {
'Unknown' : 'N',
'Less than $40K' : 'a',
'$40K - $60K' : 'b',
'$60K - $80K' : 'c',
'$80K - $120K' : 'd',
'$120K +' : 'e'
}
df4["newIncome"] = df4["Income_Category"].map(lambda x:dic[x])
ans = df4.newIncome
ans.head()
* 딕셔너리에서는 key값으로 value 를 부를 수 있다.
Q. Education_Level의 값중 Graduate단어가 포함되는 값은 1 그렇지 않은 경우에는 0으로 변경하여 newEduLevel 컬럼을 정의하고 빈도수를 출력하라
df4["newEduLevel"] = df4.Education_Level.map(lambda x: 1 if 'Graduate' in x else 0)
ans = df4["newEduLevel"].value_counts()
ans
Q. Gender 컬럼값 M인 경우 male F인 경우 female로 값을 변경하여 Gender 컬럼에 새롭게 정의하라. 각 value의 빈도를 출력하라
def gender(x):
if x == "M":
return "male"
else:
return "female"
df4["Gender"] = df4["Gender"].map(gender)
df4["Gender"].value_counts()
2. apply
(1) 데이터프레임 기본 형태
df1 = df.apply(lambda x:x/2)
(2) 시리즈 기본형태
df2 = df["컬럼명"].apply(lambda x:x/2)
(3) 문제 풀이 예
Income_Category의 카테고리를 apply 함수를 이용하여 다음과 같이 변경하여 newIncome 컬럼에 매핑하라
def changeCategory(x):
if x =='Unknown':
return 'N'
elif x =='Less than $40K':
return 'a'
elif x =='$40K - $60K':
return 'b'
elif x =='$60K - $80K':
return 'c'
elif x =='$80K - $120K':
return 'd'
elif x =='$120K +' :
return 'e'
# 시리즈
df4["newIncome"] = df4.Income_Category.apply(changeCategory)
ans = df4["newIncome"]
ans.head()
def age_pclass(cols):
Age = cols[0]
Pclass = cols[1]
if pd.isnull(Age):
if Pclass == 1: return 38
elif Pclass = 2: return 29
else: return 25
else: return Age
# 데이터 프레임
train["Age"] = train[["Age", "Pclass"]].apply(age_pclass, axis = 1)
Q. Marital_Status 컬럼값이 Married 이고 Card_Category 컬럼의 값이 Platinum인 경우 1 그외의 경우에는 모두 0으로 하는 newState컬럼을 정의하라. newState의 각 값들의 빈도수를 출력하라
def function(x):
if x.Marital_Status == "Married" and x.Card_Category == "Platinum":
return 1
else:
return 0
df["newState"] = df4.apply(function, axis = 1)
df["newState"].value_counts()
?? axis = 1을 지정안하면 오류가 나는데 그 이유는 무엇일까?
3. applymap
(1) 데이터프레임 기본 형태
df1 = df.apply(lambda x:x/2)
참고
https://data-make.tistory.com/123
[파이썬] 판다스(pandas) 팁40. apply(), map(), applymap() 함수의 적용 대상과 차이점 : 네이버 블로그 (naver.com)
'Python > Pandas' 카테고리의 다른 글
[Python] Pandas - 12. groupby, pivot, pivot_table (0) | 2022.10.26 |
---|---|
[Python] Pandas - 10. 구간 나누기(cut, qcut) (0) | 2022.10.26 |
[Python] Pandas - 9. dt접근(datetime) (0) | 2022.10.26 |
[Python] Pandas - 8. value_counts(빈도수 확인), sort_(정렬하기) (0) | 2022.10.26 |
[Python] Pandas - 7. 데이터프레임 원하는 값만 출력하기 (0) | 2022.10.26 |
댓글