- 과거내용
- DataFrame - 객채 내 연산
#원본 데이터
data=[[1.25,2.23],[3.21,4.56]]
col=['col1','col2']
row=['row1','row2']
df = pd.DataFrame(data=data, index=row, columns=col)
출력
col1 col2
row4 1.25 2.23
row5 3.21 4.56
1. 반올림
#반올림
df.round(0)
df.round(1)
출력
col1 col2
row4 1.0 2.0
row5 3.0 5.0
col1 col2
row1 1.2 2.2
row2 3.2 4.6
0은 일의자리까지 반올림, n은 소수n번째 자리까지 반올림이다.
2. 합계
#행의 합
print(df.sum(axis=1))
출력
row1 3.48
row2 7.77
dtype: float64
#열의 합
print(df.sum(axis=0))
출력
col1 4.46
col2 6.79
dtype: float64
추가로 skipna라는 옵션이 있는데, false인 경우 계산에 NaN을 포함하여
결과가 NaN이 나올 수 있다.
3. 곱
곱셈도 합과 똑같다. 명령어는 prod를 사용한다.
df.prod(axis=0, skipna=True)
이렇게 하면 열을 곱하는데, NaN값은 제외하고 곱한다.
하지만 min_count라는 옵션이 있는데 이는 계산에 필요한 최소의 숫자를 의미한다.
에시로 3인데 3개의 값중 1개가 NaN이라 2개의 값의 곱만 가능한 경우라면
skipna를 True로 설정해도 결과값이 NaN이 나올 수 있다.
4. 절대값
df.abs()
이렇게 입력하면 df 전체가 절대값을 사용한 결과가 나온다.
5. 전치
전치라는 개념도 인공지능수학에서 배웠던 개념이다.
대각선을 중심으로 행과 열을 뒤집는 것을 의미한다.
#원본 데이터
col1 col2
row4 1.25 2.23
row5 3.21 4.56
#전치
df.transpose()
출력
row1 row2
col1 1.25 3.21
col2 2.23 4.56
여기서는 copy라는 옵션이 있는데 값을 반환할 지 설정하는 것이다.
6. 순위(rank)
#원본 데이터
Value
A 5
B 5
C <NA>
D 1
E -3.1
F 6
G 0.1
H -3
I 3
#작은 순으로 순위
df['min']=df['Value'].rank(method='min')
출력
Value min
A 5 6.0
B 5 6.0
C <NA> NaN
D 1 4.0
E -3.1 1.0
F 6 8.0
G 0.1 3.0
H -3 2.0
I 3 5.0
결과를 보면 순위가 6등 6등으로 같은 것을 볼 수 있다.
이외에도 method에는 max, average, first, dense 등의 옵션이 있다.
추가로 na_option, ascending 등의 옵션도 있다.
7. 차이(이산)
#원본 데이터
col1 col2 col3
0 1 8 1
1 2 7 2
2 3 6 4
3 4 5 8
4 5 4 16
5 6 3 32
6 7 2 64
7 8 1 128
#차이 - 행과 행 혹은 열과 열의 차이
df=df.diff(axis=0)
출력
col1 col2 col3
0 NaN NaN NaN
1 1.0 -1.0 1.0
2 1.0 -1.0 2.0
3 1.0 -1.0 4.0
4 1.0 -1.0 8.0
5 1.0 -1.0 16.0
6 1.0 -1.0 32.0
7 1.0 -1.0 64.0
추가로 periods를 사용하여 2,3으로 변경하여 2칸, 3칸 거리의 차이로 바꿀 수 있다.
8. 차이(백분율)
#원본 데이터
col1 col2 col3
0 1 8 1
1 2 7 2
2 3 6 4
3 4 5 8
4 5 4 16
5 6 3 32
6 7 2 64
7 8 1 128
#차이(백분율) - (다음행-현재행) / 현재행
df=df.pct_change()
출력
col1 col2 col3
0 NaN NaN NaN
1 1.000000 -0.125000 1.0
2 0.500000 -0.142857 1.0
3 0.333333 -0.166667 1.0
4 0.250000 -0.200000 1.0
5 0.200000 -0.250000 1.0
6 0.166667 -0.333333 1.0
7 0.142857 -0.500000 1.0
이것도 periods를 사용하여 다른 행과의 백분율로 나타낼 수 있다.
추가로 fill_method를 사용하여 ffill bfill을 사용하여 각각 위, 아래 값으로 결측치를 대체할 수 있다.
9. 누적계산
#원본 데이터
col1 col2 col3
0 1 8 1
1 2 7 2
2 3 6 4
3 4 5 8
4 5 4 16
5 6 3 32
6 7 2 64
7 8 1 128
#누적합
df=df.expanding().sum()
출력
col1 col2 col3
0 1.0 8.0 1.0
1 3.0 15.0 3.0
2 6.0 21.0 7.0
3 10.0 26.0 15.0
4 15.0 30.0 31.0
5 21.0 33.0 63.0
6 28.0 35.0 127.0
7 36.0 36.0 255.0
이외에도 min_periods, axis, method, center 등의 옵션이 있다.
10. 기간이동 계산
rolling을 사용하여 현재 열에 대하여 특정 추가 메서드를 지정하여 연산하게 한다.
#원본 데이터
col1 col2 col3
0 1 8 1
1 2 7 2
2 3 6 4
3 4 5 8
4 5 4 16
5 6 3 32
6 7 2 64
7 8 1 128
#현재 열 포함 3개의 열의 합
df=df.rolling(window=3).sum()
출력
col1 col2 col3
0 NaN NaN NaN
1 NaN NaN NaN
2 6.0 21.0 7.0
3 9.0 18.0 14.0
4 12.0 15.0 28.0
5 15.0 12.0 56.0
6 18.0 9.0 112.0
7 21.0 6.0 224.0
이외에도 closed, win_type, on 등의 옵션이 있다.
11. 그룹화계산
#원본 데이터
index col1 col2 col3
0 A 0 5 6
1 A 8 1 8
2 B 1 5 1
3 B 6 8 5
4 C 6 3 0
5 C 0 3 5
6 D 0 4 5
7 D 7 0 4
8 E 6 3 6
9 E 6 4 4
#인덱스 별 평균
df=df.groupby('index').mean()
출력
col1 col2 col3
index
A 8.0 5.0 1.5
B 6.5 7.5 3.5
C 7.0 3.5 2.5
D 4.0 1.5 1.0
E 6.0 4.0 2.5
mean 외에도 count, agg, apply 등을 사용할 수 있다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
EDA - 1단계 : 데이터 다루기 - 비교, 필터링, 결측치 (2) | 2023.07.10 |
---|---|
EDA - 1단계 : 데이터 다루기 - 함수 적용, 인덱싱 (1) | 2023.07.08 |
EDA - 1단계 : 데이터 다루기 - 객체 간 연산 (1) | 2023.07.07 |
토이프로젝트 - (9) 다변량 선형 확률과정 - 3단계 (2) | 2023.06.29 |
데이터 분석 - 데이터 추출 및 자료 구조 다루기 (2) | 2023.01.21 |