전공공부/인공지능

pandas 2편

prefer_all 2022. 7. 24. 19:21

 

<목차>
1. Lambda
2. map
- replace

3. apply
- applymap

4. Built-in function
- describe
- unique
- isnull
- sort_values
- corr, cov, corrwith


Lambda argument: expression

  • 한 줄로 함수를 표현하는 익명 함수 기법
'''
same as
def f(x,y);
	return x+y
'''
f = lambda x,y:x+y
f(1,4)

 

하나의 argument만 처리하는 lambda 함수

f = lambda x:x/2
f(3) #1.5

 

이름을 할당하지 않는 lambda 함수

(lambda x:x+1)(5) #6

map (function, sequence)

  • 함수와 sequence형 데이터를 인자로 받아 각 element마다 입력받은 함수를 적용하여 list로 반환
  • 일반적으로 함수를 lambda 형태로 표현
ex = [1,2,3,4,5]
f = lambda x: x**2
list(map(f,ex)) #[1,4,9,16,25]

 

두 개 이상의 argument가 있을 때는 두 개의 sequence 형을 써야함

f = lambda x, y: x+y
list(map(f,ex,ex))

 

익명 함수 그대로 사용가능

list(map(lambda x: x+x, ex))

 

map for series

ex1)

s1 = Series(np.arange(10))
s1.map(lambda x: x**2).head(5)
'''
0     0
1     1
2     4
3     9
4    16
dtype: int64
'''

 

dict type으로 데이터 교체, 없는 값은 NaN

z = {1: 'A', 2: 'B', 3: 'C'}
s1.map(z)
'''
0    NaN
1      A
2      B
3      C
4    NaN
5    NaN
6    NaN
7    NaN
8    NaN
9    NaN
dtype: object
'''

 

같은 위치의 데이터를 s2로 전환

s2 = Series(np.arange(10,20))
s1.map(s2)
'''
0    10
1    11
2    12
3    13
4    14
5    15
6    16
7    17
8    18
9    19
dtype: int32
'''

 

 

ex2)

df = pd.read_csv("wages.csv")
df.head()

df.sex.unique()
#array(['male', 'female'], dtype=object)

df["sex_code"] = df.sex.map({"male":0, "female":1})


replace

  • map 함수의 기능 중 데이터 변환 기능만 담당


map - 딕셔너리 사용
- 단일 칼럼 변환
apply - dataframe과 series를 모두 다룰 수 있음
applymap - dataframe 전체 데이터 셀에 적용

 

apply (function)

  • map과 달리, series 전체(column)에 해당 함수 적용
  • 입력값을 series 데이터로 받아서 handling 가능

 

  • 내장 연산함수를 사용할 때도 각 column 별로 결과값 반환 (mean, std)
  • series 값도 반환 가능


applymap (function)

  • series 단위가 아닌 element 단위로 함수 적용
  • dataframe의 모든 element에 대해 원하는 함수 적용


Built-in function

 

df.describe()

  • numeric type 데이터 요약 정보를 보여줌

 

df. .unique()

  • series data의 유일한 값의 list를 반환함

 

df.sum(axis = 0) column 별 합

df.sum(axis =1) row 별 합

 

df.isnull()

  • column 또는 row 값의 NaN (null) 값의 index를 반환

 

df.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

  • column 값을 기준으로 데이터 sorting
  • by : 정렬 기준이될 레이블입니다.
    axis : {0 : index / 1: columns} 정렬할 레이블입니다. 0이면 행, 1이면 열을 기준으로 정렬합니다.
    inplace : 원본을 대체할지 여부입니다. True일 경우 원본을 대체하게 됩니다.
    kind : 알고리즘 모드 입니다. 모드는 총 4종으로 quicksortmergesortheapsortstable이 있는데,
    속도와 효율성의 차이를 갖습니다. 기본적으로 quicksort이며, 자세한건 numpy doc에서 확인 가능합니다.
    na_position : {first / last} Na값의 위치입니다. 기본값은 last로 정렬시 맨 뒤에 위치합니다.
    ignore_index : 인덱스의 무시 여부입니다. True일 경우 인덱스의 순서와 상관없이 0,1,2,... 로 정해집니다.
    key : 이 인수를 통해 정렬방식으로 함수를 사용할 수 있습니다. lamba의 사용이 가능합니다.
'''
col1 col2  col3
row1  -3.0    A    17
row2   NaN    D    31
row3   7.0    D    -8
row4  15.0    Z     3
row5   0.0  NaN    -7
'''

df.sort_values(by='col3')
'''
 col1 col2  col3     #col3을 기준으로 오름차순 정렬된 것을 확인할 수 있습니다.
row3   7.0    D    -8
row5   0.0  NaN    -7
row4  15.0    Z     3
row1  -3.0    A    17
row2   NaN    D    31
'''

 

Correlation & Covariance

  • 상관계수와 공분산을 구하는 함수
  • df.corr(method='pearson', min_periods=1)
    method : {pearson / kendall / spearman} 적용할 상관계수 방식입니다.
    min_periods : 유효한 결과를 얻기위한 최소 값의 수 입니다. (피어슨, 스피어먼만 사용가능)
  • df.cov(min_periods=None, ddof=1)
    min_periods : 공분산을 구할 최소 요소의 갯수 입니다. 요소의 갯수가 모자르면 NaN을 반환합니다.
  • df.corrwith(other, axis=0, drop=False, method='pearson')
    other : 동일한 이름의 행/열을 비교할 다른 객체입니다.
    axis : {0 : index / 1 : columns} 비교할 축 입니다. 기본적으로 0으로 인덱스끼리 비교합니다.
    drop : 동일한 이름의 행/열이 없을경우 NaN을 출력하는데, 이를 출력하지 않을지 여부입니다.
    method : {pearson / kendall / spearman} 적용할 상관계수 방식입니다.