pandas - 多处理熊猫中的模糊匹配
问题描述
我有两个数据框。DF_Address,它有 347k 不同的地址和 DF_Project,它有 24k 记录
Project_Id、Project_Start_Date 和 Project_Address
我想检查 Df_Address 中我的 Project_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',得分)
但它也给出了类似的字符串。我还需要提取
Project_Id 和 Project_Start_Date
. 有人可以帮助我使用并行处理来实现这一点,因为数据量很大。
解决方案
您可以将元组转换为数据框,然后加入您的基础数据框。
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
推荐阅读
- sql - 从 SAS 面板数据中创建具有“结束日期”的列
- ios - Core Data 嵌套数组计数
- reactjs - GET 请求中的数据未从状态传递到道具
- php - WooCommerce | woocommerce_email_before_order_table 函数调用不适用于初始电子邮件发送,但适用于状态更改
- pandas - 使用日期时间格式从数据框列中删除时区
- javascript - 带有摘要行的 ExtJS 网格在最后一行不会有“x-grid-item-over”
- azure-functions - 无法关闭连接 python gremlin 客户端
- discord.py - 使命令对不和谐机器人不区分大小写
- ios - iOS 12 上的 UISearchController 子类崩溃
- python - 如何阻止我的机器人响应@everyone pings,但也响应discord.py 中的@Bot pings?