티스토리 뷰

difflib.get_close_matches를 사용하여 데이터명 매칭하기

데이터 정제와 분석을 할 때, 여러 데이터프레임 간의 데이터명을 비교하고 유사한 항목을 찾는 작업이 종종 필요합니다. 이때 Python의 difflib 모듈을 사용하면 매우 유용합니다. 이번 글에서는 difflib.get_close_matches 함수를 활용하여 두 데이터프레임 간의 유사한 데이터명을 찾아 매칭하는 방법을 소개합니다.

사용 예시

1. 데이터프레임 준비

우선, 예시 데이터를 포함한 두 개의 데이터프레임을 준비합니다.

import pandas as pd

# 예시 데이터프레임
df1 = pd.DataFrame({
    '데이터명': ['서울특별시', '부산광역시', '대구광역시', '인천광역시', '광주광역시']
})

d2f = pd.DataFrame({
    '기준데이터명': ['서울', '부산', '대구', '인천', '광주']
})

2. get_close_matches 함수 사용하기

difflib.get_close_matches 함수를 사용하여 두 데이터프레임의 데이터명을 비교하고 유사한 항목을 찾습니다. 이 작업을 함수로 정의하여 재사용할 수 있게 하겠습니다.

from difflib import get_close_matches

# df1에 '기준데이터명' 컬럼 추가
df1['매핑데이터명'] = None

# df2의 데이터명을 리스트로 변환
df2_list = df2['기준데이터명'].tolist()

# df1의 데이터명과 df2의 데이터명을 비교하여 유사한 데이터명을 찾고 추가
def find_close_match(file_name, std_data_names, cutoff=0.4): 
    matches = get_close_matches(file_name, df2_list, n=1, cutoff=cutoff) # 이때 cutoff는 데이터에 맞게 수정해야합니다
    return matches[0] if matches else None

# df1의 '기준데이터명' 컬럼에 유사한 데이터명을 추가
df1['매핑데이터명'] = df1['데이터명'].apply(lambda x: find_close_match(x, df2_list))

print(df1)

위 코드에서 find_close_match 함수는 file_namedf2_list 리스트를 입력받아 가장 유사한 데이터명을 반환합니다. cutoff 값은 유사도의 기준을 설정하며, 필요에 따라 조정할 수 있습니다. apply 메서드를 사용하여 df1의 각 행에 대해 함수를 적용합니다.

3. 결과 확인

코드를 실행하면 df1 데이터프레임에 기준데이터명 컬럼이 추가되고, 유사한 데이터명이 매칭된 결과를 확인할 수 있습니다.

       데이터명 매핑데이터명
0  서울특별시      서울
1  부산광역시      부산
2  대구광역시      대구
3  인천광역시      인천
4  광주광역시      광주

이와 같이, difflib.get_close_matches 함수를 활용하면 데이터프레임 간의 유사한 항목을 쉽게 매칭할 수 있습니다. 이를 통해 데이터 정제 작업을 효율적으로 수행할 수 있습니다. 필요에 따라 cutoff 값을 조정하여 유사도의 기준을 변경할 수 있으며, 매칭 결과를 원하는 형식에 맞게 사용할 수 있습니다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함