데이터 준비하기
df = pd.read_csv('data/scores.csv')
df = df.head()
df_copy = df.copy()
df.head()
"""
name kor eng math
0 Aiden 100.0 90.0 95.0
1 Charles 90.0 80.0 75.0
2 Danial 95.0 100.0 100.0
3 Evan 100.0 100.0 100.0
4 Henry NaN 35.0 60.0
"""
df_copy.head()
"""
name kor eng math
0 Aiden 100.0 90.0 95.0
1 Charles 90.0 80.0 75.0
2 Danial 95.0 100.0 100.0
3 Evan 100.0 100.0 100.0
4 Henry NaN 35.0 60.0
"""
함수로 컬럼의 데이터 변경하기
- 컬럼.apply(함수명)
- 컬럼.apply(함수명, 매개변수명=매개변수값)
매개변수명을 명시해주어야 한다. - 적용할 함수가 미리 정의되어 있어야 한다.
#df['math']의 모든점수에 5점 더하기.(--> 105점?)
df_copy.math = df.math+5
df_copy
"""
name kor eng math
0 Aiden 100.0 90.0 100.0
1 Charles 90.0 80.0 80.0
2 Danial 95.0 100.0 105.0
3 Evan 100.0 100.0 105.0
4 Henry NaN 35.0 65.0
"""
#df['math']의 모든점수에 5점 더하기. 100점이 넘을 수 없다.
def plus5(x):
score = x+5
if score>=100:
score=100
return score
df_copy['math'] = df['math'].apply(plus5)
df_copy
"""
name kor eng math
0 Aiden 100.0 90.0 100.0
1 Charles 90.0 80.0 80.0
2 Danial 95.0 100.0 100.0
3 Evan 100.0 100.0 100.0
4 Henry NaN 35.0 65.0
"""
# 모든 점수에 n점 더하기. 100점이 넘을 수 없다.
def plusn(x,n):
score = x+n
if score>=100:
score=100
return score
# df['eng']의 모든 점수에 1점 더하기. 100점이 넘을 수 없다.
df_copy['eng'] = df['eng'].apply(plusn, n=1)
df_copy
"""
name kor eng math
0 Aiden 100.0 91.0 100.0
1 Charles 90.0 81.0 80.0
2 Danial 95.0 100.0 100.0
3 Evan 100.0 100.0 100.0
4 Henry NaN 36.0 65.0
"""
함수로 행/열의 데이터 집계하기
- 데이터프레임.apply(함수명, axis=0) : 열단위로 함수가 적용된다.
- 데이터프레임.apply(함수명, axis=1) : 행단위로 함수가 적용된다.
df = pd.read_csv('data/scores.csv')
df = df.head()
df.index = df.name
df.drop(columns=['name'], inplace=True)
df_copy = df.copy()
df.head()
"""
kor eng math
name
Aiden 100.0 90.0 95.0
Charles 90.0 80.0 75.0
Danial 95.0 100.0 100.0
Evan 100.0 100.0 100.0
Henry NaN 35.0 60.0
"""
df_copy.head()
"""
kor eng math
name
Aiden 100.0 90.0 95.0
Charles 90.0 80.0 75.0
Danial 95.0 100.0 100.0
Evan 100.0 100.0 100.0
Henry NaN 35.0 60.0
# 행단위 데이터 출력
def print_me(x):
print(x)
df.apply(print_me, axis=1)
"""
kor 100.0
eng 90.0
math 95.0
Name: Aiden, dtype: float64
kor 90.0
eng 80.0
math 75.0
Name: Charles, dtype: float64
kor 95.0
eng 100.0
math 100.0
Name: Danial, dtype: float64
kor 100.0
eng 100.0
math 100.0
Name: Evan, dtype: float64
kor NaN
eng 35.0
math 60.0
Name: Henry, dtype: float64
name
Aiden None
Charles None
Danial None
Evan None
Henry None
dtype: object
# 합계 구하기
def get_sum(x):
return x.sum()
# 학생 별 점수 합계
df_copy['sum'] = df.apply(get_sum, axis=1)
df_copy
"""
kor eng math sum
name
Aiden 100.0 90.0 95.0 285.0
Charles 90.0 80.0 75.0 245.0
Danial 95.0 100.0 100.0 295.0
Evan 100.0 100.0 100.0 300.0
Henry NaN 35.0 60.0 95.0
# 과목 별 점수 합계
df_copy.loc['sum'] = df.apply(get_sum, axis=0)
df_copy
"""
kor eng math sum
name
Aiden 100.0 90.0 95.0 285.0
Charles 90.0 80.0 75.0 245.0
Danial 95.0 100.0 100.0 295.0
Evan 100.0 100.0 100.0 300.0
Henry NaN 35.0 60.0 95.0
sum 385.0 405.0 430.0 NaN
'파이썬 > 파이썬 pandas' 카테고리의 다른 글
[pandas] 데이터 프레임 연결하기 concat, merge (0) | 2023.05.12 |
---|---|
[pandas] 결측치 처리하기 isnull, dropna, fillna (0) | 2023.05.11 |
[pandas] 행 변경하기 append, loc, drop, index, rename (0) | 2023.05.11 |
[pandas] 열 변경하기 columns, rename (0) | 2023.05.11 |
[pandas] 행번호, 열번호로 데이터 추출하기 iloc[], iloc[[]], iloc[:], iloc[-1] (0) | 2023.05.11 |