티스토리 뷰
파이썬(Python)&판다스(Pandas)&Polars
[Pandas] get_close_matches 함수를 사용한 유사한 데이터 값 매핑하기
송채채 2024. 6. 14. 14:19difflib.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_name
과 df2_list
리스트를 입력받아 가장 유사한 데이터명을 반환합니다. cutoff
값은 유사도의 기준을 설정하며, 필요에 따라 조정할 수 있습니다. apply
메서드를 사용하여 df1
의 각 행에 대해 함수를 적용합니다.
3. 결과 확인
코드를 실행하면 df1
데이터프레임에 기준데이터명
컬럼이 추가되고, 유사한 데이터명이 매칭된 결과를 확인할 수 있습니다.
데이터명 매핑데이터명
0 서울특별시 서울
1 부산광역시 부산
2 대구광역시 대구
3 인천광역시 인천
4 광주광역시 광주
이와 같이, difflib.get_close_matches
함수를 활용하면 데이터프레임 간의 유사한 항목을 쉽게 매칭할 수 있습니다. 이를 통해 데이터 정제 작업을 효율적으로 수행할 수 있습니다. 필요에 따라 cutoff
값을 조정하여 유사도의 기준을 변경할 수 있으며, 매칭 결과를 원하는 형식에 맞게 사용할 수 있습니다.
반응형
'파이썬(Python)&판다스(Pandas)&Polars' 카테고리의 다른 글
[Python] 파이썬으로 특정 컬럼 기준으로 CSV 파일 분리 (0) | 2024.08.13 |
---|---|
한글 문자열 유사도 매칭 (diff vs. fuzzywuzzy vs.rapidfuzz) (0) | 2024.06.25 |
[Python] JSON의 모든 key, value를 재귀적으로 탐색해서 데이터프레임으로 만들기 (1) | 2024.04.24 |
[polars] 데이터프레임의 결측값을 리스트 형태로 추출하고 변환 (null_count, to_list) (0) | 2024.04.09 |
[polars] 데이터 EDA 코드 만들기 (컬럼수, 행수, 결측값 등) (0) | 2024.04.09 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MongoDB
- python'
- rdflib
- vscode
- LLM
- polars
- writerow
- vervel
- 지식그래프
- 지식그래프임베딩
- PostgreSQL
- pandas
- Vue3
- 키워드추출
- cursorai
- geospy
- rdffox
- Postgis
- knowledgegraph
- PEFT
- Encoding
- SPARQL
- TextRank
- hadoop
- psycopg
- python
- pdfmathtranslate
- ChatGPT
- deepseek
- Claude
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함