파이썬 판다스 데이터프레임 두 개의 차이점 찾기
compare() 함수 사용
pandas.DataFrame
에는 두 데이터프레임을 비교하고 차이점을 요약하는 compare()
함수가 있습니다. 이 함수는 다음과 같은 다양한 옵션을 제공합니다.
align
: 비교하기 전에 데이터프레임을 정렬할지 여부를 지정합니다.keep_equal
: 일치하는 값을 포함할지 여부를 지정합니다.keep_shape
: 비교 결과의 형태를 유지할지 여부를 지정합니다.
다음 예제에서는 compare()
함수를 사용하여 두 데이터프레임의 차이점을 비교합니다.
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [1, 2, 3], 'B': [5, 6, 7]})
# 기본 비교
df1.compare(df2)
# 일치하는 값 포함
df1.compare(df2, keep_equal=True)
# 형태 유지
df1.compare(df2, keep_shape=True)
diff() 함수 사용
axis
: 차이점을 계산할 축을 지정합니다.
df1.diff()
# 열별 차이점 계산
df1.diff(axis=1)
# 2기간 차이점 계산
df1.diff(periods=2)
.loc 및 .iloc 속성 사용
두 데이터프레임의 인덱스와 열 이름이 일치하는 경우 .loc
또는 .iloc
속성을 사용하여 차이점을 직접 계산할 수 있습니다.
df1.loc[df1 != df2]
NumPy 함수 사용
NumPy 배열 함수를 사용하여 두 데이터프레임의 차이점을 계산할 수도 있습니다.
import numpy as np
np.subtract(df1, df2)
시각화
두 데이터프레임의 차이점을 시각화하는 데 도움이 되는 다양한 라이브러리가 있습니다.
다음 예제에서는 seaborn
라이브러리를 사용하여 두 데이터프레임의 차이점을 히스토그램으로 시각화합니다.
import seaborn as sns
sns.histplot(data=df1-df2)
예제 코드
import pandas as pd
import numpy as np
import seaborn as sns
# 데이터프레임 생성
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [1, 2, 3], 'B': [5, 6, 7]})
# ## 1. compare() 함수 사용
# 기본 비교
df1.compare(df2)
# 일치하는 값 포함
df1.compare(df2, keep_equal=True)
# 형태 유지
df1.compare(df2, keep_shape=True)
# ## 2. diff() 함수 사용
# 기본 차이점 계산
df1.diff()
# 열별 차이점 계산
df1.diff(axis=1)
# 2기간 차이점 계산
df1.diff(periods=2)
# ## 3. .loc 및 .iloc 속성 사용
# 차이점 있는 값만 출력
df1.loc[df1 != df2]
# ## 4. NumPy 함수 사용
# NumPy subtract 함수 사용
np.subtract(df1, df2)
# ## 5. 시각화
# 히스토그램으로 시각화
sns.histplot(data=df1-df2)
대체 방법
DataFrame.eq()
및 DataFrame.ne()
함수는 각각 두 데이터프레임의 값이 일치하는지 또는 일치하지 않는지 확인하는 데 사용할 수 있습니다.
다음 예제에서는 DataFrame.eq()
및 DataFrame.ne()
함수를 사용하여 두 데이터프레임의 차이점을 확인합니다.
# 일치 여부 확인
df1.eq(df2)
# 일치하지 않는 값만 출력
df1.ne(df2)
zip() 함수 및 집합 비교 사용
zip()
함수를 사용하여 두 데이터프레임의 값을 묶고, 집합 비교를 사용하여 차이점을 확인할 수 있습니다.
# 값 묶기
zipped_data = zip(df1.values, df2.values)
# 차이점 확인
set(zipped_data) - set(df1.values)
itertools.islice() 함수 사용
itertools.islice()
함수를 사용하여 두 데이터프레임을 순환하고 차이점을 확인할 수 있습니다.
from itertools import islice
# 순환하며 차이점 확인
for i, (row1, row2) in enumerate(islice(zip(df1.itertuples(), df2.itertuples()), None)):
if row1 != row2:
print(f"차이점 발견: 행 {i+1}")
print(f" {row1}")
print(f" {row2}")
사용자 정의 함수 사용
특정 요구 사항에 맞게 사용자 정의 함수를 사용하여 두 데이터프레임의 차이점을 확인할 수 있습니다.
def find_differences(df1, df2):
"""
두 데이터프레임의 차이점을 찾는 사용자 정의 함수
Args:
df1: 첫 번째 데이터프레임
df2: 두 번째 데이터프레임
Returns:
차이점 목록
"""
differences = []
for i in range(len(df1)):
row1 = df1.iloc[i]
row2 = df2.iloc[i]
for col in df1.columns:
if row1[col] != row2[col]:
differences.append((i, col, row1[col], row2[col]))
return differences
# 차이점 찾기
differences = find_differences(df1, df2)
# 결과 출력
for difference in differences:
print(f"차이점 발견: 행 {difference[0]+1}, 열 {difference[1]}")
print(f" {difference[2]} != {difference[3]}")
python pandas dataframe