【问题标题】:Multiprocessing the Fuzzy match in pandas多处理熊猫中的模糊匹配
【发布时间】:2020-08-13 07:58:48
【问题描述】:

我有两个数据框。 DF_Address,有 347k 不同的地址和 DF_Project,有 24k 记录有

Project_Id、Project_Start_Date 和 Project_Address

我想检查我的 Project_Address 在 Df_Address 中是否存在模糊匹配。如果有匹配项,我想提取相同的 Project_ID 和 Project_Start_Date。下面是我正在尝试的代码

import pandas as pd
import numpy as np
from fuzzywuzzy import fuzz
from fuzzywuzzy import process

Df_Address = pd.read_csv("Cantractor_Addresses.csv")
Df_Project = pd.read_csv("Project_info.csv")
#address = list(Df_Project["Project_Address"])

def fuzzy_match(x, choices, cutoff):
print(x)
return process.extractOne(
    x, choices=choices, score_cutoff=cutoff
)

Matched = Df_Address ["Address"].apply(
fuzzy_match,
args=(
    Df_Project ["Project_Address"], 
    80
     )
        )

这段代码确实提供了元组形式的输出

('matched_string', score)

但它也给出了类似的字符串。我也需要提取

Project_Id 和 Project_Start_Date

。有人可以帮助我使用并行处理来实现这一点,因为数据量很大。

【问题讨论】:

    标签: pandas parallel-processing multiprocessing apply fuzzywuzzy


    【解决方案1】:

    您可以将元组转换为数据框,然后加入您的基础数据框。

    import pandas as pd
    Df_Address = pd.DataFrame({'address': ['abc','cdf'],'random_stuff':[100,200]})
    Matched = (('abc',10),('cdf',20))
    dist = pd.DataFrame(x)
    dist.columns = ['address','distance']
    final = Df_Address.merge(dist,how='left',on='address')
    print(final)
    

    输出:

      address  random_stuff  distance
    0     abc           100        10
    1     cdf           200        20
    

    【讨论】:

    • 你不是模糊匹配。 Pandas 的合并直接比较字符串,它们必须相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2021-12-21
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多