Pandas 기존 데이터와 다른 증분 차집합 구하는 방법

오늘은 판다스에서 기존 데이터에서 업데이트 된 증분만을 찾는 방법을 알아보겠습니다.

 

즉 차집합을 구하는 것인데요.

 

예를 들어 두개의 엑셀 파일에서 새로운 행만 변경하는 것을 코딩해보도록 하겠습니다.

 

먼저 폴더에서 xlsx로 된 파일을 찾습니다.

 

아래의 코드를 통해 file_list2라는 것에 엑셀 파일을 불러옵니다.

 

그리고 가장 최근의 파일과 [-1] 다음번의 파일인 [-2]를 불러옵니다

#파일 리스트 구하기
file_list1 = os.listdir(allDir)

file_list2 = [file for file in file_list1 if file.endswith(".xlsx")]

file_list2.sort()

df1 = pd.read_excel(allDir+file_list2[-1])
df2 = pd.read_excel(allDir+file_list2[-2])

이 두개의 값을 비교하여 추가된 파일을 찾을텐데요.

 

Pandas 두개의 엑셀 파일 차이나는 값 찾기

간단하게 dft라는 데이터프레임을 만들어서 outer join을 시행하였는데요.

 

이때 비교값으로는 on을 통해서 url을 설정했습니다.

 

먼저 pd.merge를 통해 두개를 합치고, outer join을 통해 모든 값을 가져옵니다.

 

그리고 이때 _merge라는 필드에 both,right_only, left_only가 뜨는데요.

 

이 중에서 원하는 값인 left_only or Right_only를 선택하고,

 

마지막으로 iloc을 통해서 중복된 값을 삭제할 수도 있습니다.

dft = pd.merge(df1, df2, how='outer', on='url' , indicator = True)

df_q = dft.query('_merge == "left_only"')
df_l = df_q.iloc[:, :26]

이를 통해서 원하는 값을 얻어낼 수 있습니다.

 

pd.merge(df1, df2, how='outer', indicator = True).query('_merge == "left_only"').drop(columns=['_merge']))

 

https://towardsdatascience.com/how-to-merge-pandas-dataframes-221e49c41bec

 

How To Merge Pandas DataFrames

Performing left, right, inner and anti joins with pandas DataFrames

towardsdatascience.com

감사합니다.