티스토리 뷰
[Python&Pandas] 유사한 문자열을 매칭하는 파이썬 라이브러리(difflib)
송채채 2024. 1. 4. 14:35Python에서는 difflib
라이브러리와 pandas
라이브러리를 활용하여 비슷한 문자열을 매칭할 수 있다.
데이터프레임에서 difflib을 사용한 문자열 매칭
예를 들어 df1의 '주소' 컬럼이 있고, '서울특별시 관악구 남부순환로'라는 값이 있다.
그리고, 내가 매칭하려는 값은 '서울특별시 남부순환로'라면, str.contains는 띄어쓰기를 포함하기 때문에 찾을 수 없다.difflib
라이브러리는 시퀀스 데이터를 비교하고 찾는 데에 사용됨. 특히 get_close_matches
함수는 비슷한 문자열을 찾을 수 있다.
import difflib
import pandas as pd
# 가상의 데이터프레임 생성
data = {'주소': ['서울특별시 관악구 남부순환로', '서울특별시 강남구 테헤란로', '부산광역시 해운대구 송정해변로']}
df1 = pd.DataFrame(data)
# 매칭하려는 값
target_value = '서울특별시 남부순환로'
# difflib을 사용하여 유사한 문자열 찾기
matched_values = difflib.get_close_matches(target_value, df1['주소'], n=1, cutoff=0.8)
if matched_values:
result_df = df1[df1['주소'] == matched_values[0]]
print(result_df)
else:
print("일치하는 문자열이 없습니다.")
위 코드에서 get_close_matches
함수는 target_string
과 df['주소']
의 유사성을 비교하여 가장 유사한 문자열을 찾아준다. cutoff
매개변수는 일치하는 정도를 결정하는 임계값이다. 기본적으로 0.6로 정의되어 있지만, 유사도를 높여서 0.8로 설정함
df['주소'] == matched_strings[0]
를 사용하여 데이터프레임을 필터링하면, 일치하는 행만 추출할 수 있다.
difflib 참고문서: https://docs.python.org/ko/3/library/difflib.html
`difflib.get_close_matches(word, possibilities, n=3, cutoff=0.6)`
최상의 “충분히 좋은” 일치의 리스트를 반환합니다. word는 근접 일치가 목표로 하는 시퀀스(일반적으로 문자열)며, possibilities는 word와 일치시킬 시퀀스의 리스트입니다 (일반적으로 문자열의 리스트).
선택적 인자 n(기본값 3)은 반환할 근접 일치의 최대 개수입니다; n는 0보다 커야 합니다.
선택적 인자 cutoff(기본값 0.6)는 [0, 1] 범위의 float입니다. word와의 유사성 점수가 이 값보다 적은 possibilities는 무시됩니다.
possibilities 중에서 가장 좋은 (최대 n 개의) 일치가 리스트로 반환되는데, 유사성 점수로 정렬되어 있고 가장 유사한 것이 먼저 나옵니다.
>>>
get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
import keyword
get_close_matches('wheel', keyword.kwlist)
['while']
get_close_matches('pineapple', keyword.kwlist)
[]
get_close_matches('accept', keyword.kwlist)
['except']
'파이썬(Python)&판다스(Pandas)&Polars' 카테고리의 다른 글
[polars] 데이터 EDA 코드 만들기 (컬럼수, 행수, 결측값 등) (0) | 2024.04.09 |
---|---|
[Python] mp4를 mp3로 변환하기 (moviepy) (1) | 2024.02.13 |
[Pandas] 두 개의 데이터프레임에서 특정 문자열이 포함된 행 제거하기(~, isin) (2) | 2024.01.04 |
[Pandas] 빈 값(NaN, None)에 원하는 값 채우기(pd.where) (0) | 2024.01.03 |
[polars] pl.Config(fmt_str_lengths=) 데이터프레임의 글자를 모두 출력 (0) | 2023.12.12 |
- Total
- Today
- Yesterday
- Encoding
- ChatGPT
- SPARQL
- python
- MongoDB
- python'
- cursorai
- knowledgegraph
- 지식그래프
- polars
- pdfmathtranslate
- deepseek
- Vue3
- PEFT
- Claude
- vervel
- 키워드추출
- 지식그래프임베딩
- rdflib
- pandas
- Postgis
- vscode
- LLM
- rdffox
- hadoop
- TextRank
- psycopg
- geospy
- PostgreSQL
- writerow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |