개요
2022.12.20 - [Python] Pandas - 데이터프레임 데이터 조작 1에 이어 데이터 조작 방법을 마저 정리한다.
apply
행이나 열 단위로 복잡한 처리를 할 때 사용할 수 있는 함수다. 매개변수로 행 또는 열을 받는 함수를 넣으면 각 열 또는 행을 반복하여 그 함수에 적용시킨다.
예로 들어 아래의 데이터가 있다고 하자.
df3 = pd.DataFrame({
'A': [1, 3, 4, 3, 4],
'B': [2, 3, 1, 2, 3],
'C': [1, 5, 2, 4, 4]
})
df3
# 실행 결과
A B C
0 1 2 1
1 3 3 5
2 4 1 2
3 3 2 4
4 4 3 4
각 열의 최대값과 최솟값의 차이는 아래와 같이 계산할 수 있다.
df3.apply(lambda x: x.max() - x.min())
# 실행 결과
A 3
B 2
C 4
dtype: int64
행에 대한 계산을 할 때는 axis=1로 설정하여 계산한다.
df3.apply(lambda x: x.max() - x.min(), axis=1)
# 실행 결과
0 1
1 2
2 3
3 2
4 1
dtype: int64
각 열에 대해 어떤 값이 얼마나 사용됐는지 확인할 때는 value_counts 함수를 전달한다.
df3.apply(pd.value_counts)
# 실행 결과
A B C
1 1.0 1.0 1.0
2 NaN 2.0 1.0
3 2.0 2.0 NaN
4 2.0 NaN 2.0
5 NaN NaN 1.0
fillna
fillna 함수는 NaN을 다른 값으로 바꿀 때 사용한다.
df3.apply(pd.value_counts).fillna(0)
# 실행 결과
A B C
1 1.0 1.0 1.0
2 0.0 2.0 1.0
3 2.0 2.0 0.0
4 2.0 0.0 2.0
5 0.0 0.0 1.0
astype
astype은 데이터의 자료형을 바꿀 때 사용한다.
df3.apply(pd.value_counts).fillna(0).astype(int)
# 실행 결과
A B C
1 1 1 1
2 0 2 1
3 2 2 0
4 2 0 2
5 0 0 1
실수 값을 카테고리 값으로 변환하기
실수 값을 크기를 기준으로 하여 카테고리 값으로 변환할 때는 아래와 같은 명령을 사용할 수 있다.
- cut : 실수 값의 경계선 지정
- qcut : 갯수가 동일한 구간으로 나눈다.
예로 들어 아래와 같은 나이 데이터가 있을 때,
ages = [0, 2, 10, 21, 23, 37, 31, 61, 20, 41, 32, 101]
cut 함수에 카테고리를 나누는 기준값 bin, label를 지정하면 데이터를 카테고리로 변경한다. 영역에 포함되지 않는 데이터는 NaN으로 처리된다.
bins = [1, 20, 30, 50, 70, 100]
labels = ['미성년자', '청년' , '중년', '장년', '노년']
cats = pd.cut(ages, bins, labels=labels)
cats
# 실행 결과
[NaN, '미성년자', '미성년자', '청년', '청년', ..., '장년', '미성년자', '중년', '중년', NaN]
Length: 12
Categories (5, object): ['미성년자' < '청년' < '중년' < '장년' < '노년']
cut 함수는 Categorical 객체를 반환하는데 categories 속성으로 라벨 문자열을, codes 속성으로 정수로 인코딩한 카테고리 값을 가진다.
cats.categories
cats.codes
# 실행 결과
Index(['미성년자', '청년', '중년', '장년', '노년'], dtype='object')
array([-1, 0, 0, 1, 1, 2, 2, 3, 0, 2, 2, -1], dtype=int8)
qcut은 데이터 개수가 동일하도록 지정한 수의 구간으로 나눈다.
data = np.random.randn(1000)
cats = pd.qcut(data, 4, labels=["Q1", "Q2", "Q3", "Q4"])
cats
cats.value_counts()
# 실행 결과
['Q4', 'Q2', 'Q2', 'Q4', 'Q4', ..., 'Q1', 'Q1', 'Q2', 'Q4', 'Q3']
Length: 1000
Categories (4, object): ['Q1' < 'Q2' < 'Q3' < 'Q4']
Q1 250
Q2 250
Q3 250
Q4 250
dtype: int64
실행 결과
데이터 사이언스 스쿨 - 4.4 데이터프레임의 데이터 조작