팬더 퍼지 매치
이 기사에서는 데이터 프레임을 병합하는 방법과 퍼지 일치를 적용하여 Python에서 두 팬더의 데이터 프레임을 비교하는 방법을 설명합니다.
Python의 Pandas 데이터 프레임에 퍼지 일치 적용
두 개의 다른 테이블이 있는 다음 사용 사례가 있고 공통 열로 병합하려고 한다고 가정합니다. 예를 보세요.
첫 번째 데이터 프레임인 df1
과 두 번째 데이터 프레임인 df2
가 있으며 둘 다 Company_Name
열을 포함합니다. 예를 들어 다음 코드 블록을 참조하십시오.
import pandas as pd
df1 = [
"Amazing Art Inc.",
"Amazing Ants Ltd.",
"Beautiful Buildings Inc.",
"Clean Communication Inc.",
"Dramatic Dramas Ltd.",
]
df2 = [
"Amazing art gnc.",
"Amazing Aant Ltd.",
"Beautiful Buildings Inc",
"Clear Communication Inc.",
"Pramatic Dramas Inc.",
]
df1 = pd.DataFrame(df1, columns=["Company_Name"])
df2 = pd.DataFrame(reversed(df2), columns=["Company_Name"])
그것들을 비교할 때 우리는 그것들이 매우 유사한 이름임을 알 수 있지만 Amazing Art Inc.
가 있고 다른 데이터 프레임에 Amazing Art gnc.
가 있는 것처럼 정확하게 동일하지는 않습니다. 다른 항목은 거의 변경되지 않습니다.
실제 데이터로 작업할 때 이러한 항목을 일치시킬 수 없습니다. 다행히 fuzzywuzzy
라이브러리를 사용하는 솔루션이 있습니다. 이제 Jupyter 노트북을 사용하고 있기 때문에 Jupyter에 이 라이브러리를 설치하는 방법을 살펴보겠습니다.
sys
라이브러리를 가져오고 중괄호 안에 executable
을 사용하고 이 앞에 명령을 작성합니다.
import sys
!{sys.executable} -m pip install fuzzywuzzy
출력:
Collecting fuzzywuzzy
Downloading fuzzywuzzy-0.18.0-py2.py3-none-any.whl (18 kB)
Installing collected packages: fuzzywuzzy
Successfully installed fuzzywuzzy-0.18.0
성공적으로 설치한 후 fuzzywuzzy
라이브러리에서 필요한 기능과 모듈을 로드합니다.
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
이제 process
의 extractOne()
함수를 사용하여 어떻게 작동하는지 보여주고 가장 가능성이 높은 일치 항목만 반환합니다. 예를 들어 Beautiful Bldgfs
를 일치시킨 다음 열 이름을 사용하여 df1
과 비교하려고 합니다.
process.extractOne("Beautiful Bldgfs", df1["Company_Name"])
보시다시피 아름다운 건물 Inc.
를 반환하고 77
은 이것이 올바른 일치라는 추정 또는 확신입니다. 그리고 마지막 숫자 값에서 2
는 데이터 프레임에서 어떤 위치에 있는지를 나타냅니다.
('Beautiful Buildings Inc.', 77, 2)
모든 열에 대한 전체 데이터 프레임을 비교하려면 새 열을 만들고 df1
에서 Company_Name
열을 로드하고 map()
함수를 사용하여 매핑합니다. lambda
함수를 사용하여 extractOne()
을 호출합니다.
이 함수 안에 df2
를 입력하고 열을 확인하여 가장 일치하는 항목을 찾은 다음 튜플을 반환하기 때문에 인덱스를 사용할 수 있으며 튜플의 첫 번째 항목만 반환하기를 원합니다.
df1
을 호출한 후 모든 항목에 대해 가장 근접한 일치 항목이 있음을 확인합니다.
df1["Best_Match"] = df1["Company_Name"].map(
lambda x: process.extractOne(x, df2["Company_Name"])[0]
)
df1
출력:
다음은 위의 예제에 대한 전체 Python 코드입니다.
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
import pandas as pd
df1 = [
"Amazing Art Inc.",
"Amazing Ants Ltd.",
"Beautiful Buildings Inc.",
"Clean Communication Inc.",
"Dramatic Dramas Ltd.",
]
df2 = [
"Amazing art gnc.",
"Amazing Aant Ltd.",
"Beautiful Buildings Inc",
"Clear Communication Inc.",
"Pramatic Dramas Inc.",
]
df1 = pd.DataFrame(df1, columns=["Company_Name"])
df2 = pd.DataFrame(reversed(df2), columns=["Company_Name"])
print(process.extractOne("Beautiful Bldgfs", df1["Company_Name"]))
df1["Best_Match"] = df1["Company_Name"].map(
lambda x: process.extractOne(x, df2["Company_Name"])[0]
)
print(df1)
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn