Part 6. 데이터프레임의 다양한 응용
map(), apply(), applymap() 함수 map() : Series에서만 사용가능 apply() : Series, DataFrame 둘 다 사용 가능 applymap() : DataFrame에서만 사용 가능 apply() 함수도바 빠름 map() 함수
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 |
import seaborn as sns import pandas as pd def gender(s): if s == 'male': return "남자" else: return "여자" df = sns.load_dataset('titanic') df = df.loc[:, 'survived':'age'] df['성별1'] = df['sex'].map({'male':'남자', 'female':'여자'}) d = {'male':'남자', 'female':'여자'} df['성별2'] = df['sex'].map(d) sr = pd.Series({'male':'남자', 'female':'여자'}) df['성별3'] = df['sex'].map(sr) df['성별4'] = df['sex'].map(gender) df['성별5'] = df['sex'].map(lambda x: '남자' if x=='male' else '여자') df |
apply() 함수
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 |
import seaborn as sns import pandas as pd import numpy as np df = sns.load_dataset('titanic') df = df.loc[:, ['survived', 'pclass', 'age', 'fare']] def add_10(n): return n + 10 def add_two_obj(a, b): return a * b add_10(10) df.apply(add_10) df['age'].apply(add_10) add_two_obj(10, 20) df.apply(add_two_obj, b=10) df['age'].apply(add_two_obj, b=10) df.apply(lambda x: add_10(x)) # axis=0 or 1 의미 없음 df['age'].apply(lambda x: add_10(x)) df.apply(lambda x: add_two_obj(x['age'], x['fare']), axis=1) df.apply(np.sqrt) df.apply(np.sum, axis=0) df.apply(np.sum, axis=1) |
Series.str string 관련 함수를 모두 사용할 수 있음 Series.str.get() 함수
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import pandas as pd sr = pd.Series(["String", (1, 2, 3), ["a", "b", "c"], 123, -456, {0: "Hello", 2: "World"}]) sr [출력] 0 String 1 (1, 2, 3) 2 [a, b, c] 3 123 4 -456 5 {0: 'Hello', 2: 'World'} |
1 2 3 4 5 6 7 8 9 |
sr.str.get(2) [출력] 0 r 1 3 2 c 3 NaN 4 NaN 5 World |