반응형
데이터프레임의 값을 비교하는 여러가지 방법이 있다.
언듯 생각나는 방법으로는...
values
,iterrows()
또는iteritems()
method와 반복문을 혼합하여 for loop으로 검토하는 방법과compare()
method를 이용하는 방법이다.
프로그래밍에 익숙하며 사후 관리 영향도를 줄이려면 반복문을 활용하는 방법이 편리한 방법일 것이며, Pandas의 강력한 기능을 최대한 활용하고자 한다면 compare()
를 사용하는 것도 좋은 방법이라 판단한다.
Pandas가 항상 그렇듯, 엄청나게 많은 기능을 제공하고 있음으로,
자기에게 적합한 기능을 찾고 그를 중심으로 사용하는 것이 정답에 가깝다.
1. compare 사용해보기
데이터 셋을 우선 준비해보자.
df는 기본 데이터셋이며, df2는 비교하기 위한 데이터셋이다. 컬럼 col1과 컬럼 col3에 약간의 차이를 두었다.
- python 3.7.3
- pandas 1.3.4
- raspberry pi에서 테스트하였고, pandas doc 를 활용하였다.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"col1": ["a", "a", "b", "b", "a"],
"col2": [1.0, 2.0, 3.0, np.nan, 5.0],
"col3": [1.0, 2.0, 3.0, 4.0, 5.0]
},
columns=["col1", "col2", "col3"],
)
'''
결과물
>>> df
col1 col2 col3
0 a 1.0 1.0
1 a 2.0 2.0
2 b 3.0 3.0
3 b NaN 4.0
4 a 5.0 5.0
'''
# 비교 대상이 되는 DataFrame을 생성한다. df와 동일한 df2를 생성.
df2 = df.copy()
# 비교할 수 있도록 df2의 특정 값을 다른 값으로 변경한다.
df2.loc[0, 'col1'] = 'c' # 원래는 'a'
df2.loc[2, 'col3'] = 4.0 # 원래는 3.0
'''
결과물
>>> df2
col1 col2 col3
0 c 1.0 1.0
1 a 2.0 2.0
2 b 3.0 4.0
3 b NaN 4.0
4 a 5.0 5.0
'''
101. 기본 사용법
df.compare(df2)
결과
>>> df.compare(df2)
col1 col3
self other self other
0 a c NaN NaN
2 NaN NaN 3.0 4.0
컬럼 col1
과 col3
중 인덱스 0
과 2
에 차이가 나는 값을 표시해 주고 있으며 차이가 나지 않는 경우에는 NaN으로 표시한다.
반환값은 DataFrame 으로 비교 후 차이가 있는 값을 self와 other로 표시하는 것을 기본으로 한다.
하위컬럼 self가 df 이며, other은 df2를 의미한다.
여기까지가 기본 사용방법이다. 나머지는 알아두면 좋을 사항들~
102. 주의사항
컬럼명, 인덱스명 및 크기는 모두 일치하여야 한다.
심지어 컬럼의 순서도 일치하여야 한다.
103. 표시방법 변경
align_axis
로 self와 other를 세로로 (하위 인덱스로)표시
>>> df.compare(df2, align_axis=0) # default 값은 1
col1 col3
0 self a NaN
other c NaN
2 self NaN 3.0
other NaN 4.0
keep_shape
로 DataFrame 형태를 유지
>>> df.compare(df2, keep_shape=True) # default는 False
col1 col2 col3
self other self other self other
0 a c NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN 3.0 4.0
3 NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN
keep_equal
로 일치하는 경우에도 Nan 대신, 값을 표시
>>> df.compare(df2, keep_shape=True, keep_equal=True) # default는 False
col1 col2 col3
self other self other self other
0 a c 1.0 1.0 1.0 1.0
1 a a 2.0 2.0 2.0 2.0
2 b b 3.0 3.0 3.0 4.0
3 b b NaN NaN 4.0 4.0
4 a a 5.0 5.0 5.0 5.0
반응형
'파이썬 (투자분석용) > Pandas 및 python 일반' 카테고리의 다른 글
[python] Stochastic 오실레이터 그리기 (1) | 2022.03.11 |
---|---|
[python] 네이버금융 주요 재무정보 스크래핑 (0) | 2022.02.26 |
[Pandas] rolling과 ewm으로 이동평균 구하기 (0) | 2022.02.08 |
판다스 데이터프레임과 Lambda 함수의 이해와 사용법 (0) | 2022.02.04 |
[python] 한국증시(코스피, 코스닥) 주가정보 추출 feat. by 네이버금융 (0) | 2022.02.01 |
댓글