Python/Python기초

Python 61_ pandas dataframe, numpy array, apply함수

Codezoy 2020. 2. 13. 18:40

import numpy as np
import pandas as pd

def squares(x):
   return x ** 2

def doubles(x):
    return x * 2


result1, result2 = squares(3), doubles(3)
print(result1, result2)
9 6

array = np.array([1, 2, 3])
result1 = squares(array) # np.array ** 2
result2 = doubles(array) # np.array * 2
print(result1, result2)
[1 4 9] [2 4 6]


df = pd.DataFrame({
'a': [1, 2, 3],
'b': [4, 5, 6]
})
print(df)
print(squares(df))

   a  b
0  1  4
1  2  5
2  3  6

   a   b
0  1  16
1  4  25
2  9  36

일반 리스트의 경우
result = [[1, 2, 3], [4, 5, 6]]
print(squares(result))
TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

result = [[1, 2, 3], [4, 5, 6]]
print(doubles(result))
[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]

axis = 0: column(열) 을 함수의 파라미터에 전달한다.
result = df.apply(np.sum, axis = 0)
print(result)

a     6
b    15

axis = 1 : row(행) 을 함수의 파라미터에 전달한다.
result = df.apply(squares, axis=1) # 데이터프레임을 함수의 파라미터로 넣는 함수 apply
print(result)

   a   b
0  1  16
1  4  25
2  9  36

# 함수의 리턴값을 돌려받음
# agg(aggregate) 함수는 집계 함수들만 사용 가능
# apply는 DataFrame과 GroupBy 객체 모두에서 사용 가능

emp = pd.read_csv('emp_df.csv')
print(emp.agg(np.mean)) # 집계 함수는 숫자 타입의 컬럼만 자동으로 선택
# emp.apply(np.mean)
# apply 함수는 모든 컬럼 또는 행을 함수의 파라미터에 전달하기 때문에,
# 집계 함수(mean, sum, ...)가 제대로 동작하지 않을 수도 있음.

EMPNO     7726.571429
MGR       7739.307692
SAL       2073.214286
COMM       550.000000
DEPTNO      22.142857
dtype: float64