팬더 퍼지 매치

Salman Mehmood 2023년6월21일
팬더 퍼지 매치

이 기사에서는 데이터 프레임을 병합하는 방법과 퍼지 일치를 적용하여 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

이제 processextractOne() 함수를 사용하여 어떻게 작동하는지 보여주고 가장 가능성이 높은 일치 항목만 반환합니다. 예를 들어 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

출력:

pandas 퍼지 일치 - 출력

다음은 위의 예제에 대한 전체 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)
Salman Mehmood avatar Salman Mehmood avatar

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