python - 使用 pandas 多对多应用函数
问题描述
我正在使用该模块pandas
基于字符串匹配进行一些条件过滤。fuzzywuzzy
我编写了一些有效的代码,但是速度非常慢,并且违背了我身体的每一个本能,因为我在 pandas 系列上使用了 for 循环。
我的问题是我想将字符串数组与另一个数组进行比较,如果一个数组中的字符串与另一个数组中的任何字符串足够相似,我想将它从数组中完全删除。我目前的代码是这样的:
from fuzzywuzzy import fuzz
import pandas as pd
for value in new_contacts['StringMatch']: # this is a pandas column in a dataframe
previous_contacts['ratio'] = previous_contacts['StringMatch'].apply(lambda x: fuzz.ratio(x, value))
previous_contacts = previous_contacts[previous_contacts['ratio'] > 97] # fuzz.ratio outputs an int between 0 and 100
previous_contacts.drop('ratio', axis=1, inplace=True)
有没有人有任何建议/最佳实践来使这段代码更快?
解决方案
可能有一种更快的方法来完成您的要求。如果可能的话,我会请你重新评估你对fuzzywuzzy 包的需求。编辑距离计算非常昂贵,因为它为数组中的每对字符串构造一个大小矩阵n * m
(n
并且是两个字符串的大小)。m
推荐阅读
- gcc - mpSoC 的编译器
- for-loop - 在 Xamarin 中使用 for 循环语句更改图像
- node.js - 如果未找到关系“xxx”,则序列化列“id”
- laravel-5 - SQLSTATE[HY000] [1045] 用户 [...] 访问被拒绝(使用密码:YES) Laravel 5.2 on Live Web Server
- r - 将网格放置在 shapefile 中的多边形上,然后找到每个网格正方形的质心
- javascript - 在控制台中看不到 WebdriverIO 日志(webdriver 日志)
- javascript - 未定义从 json 返回
- javascript - 将 MMMM, dd yyyy 日期转换为 UTC 日期
- python - 包中的代理模型django
- sql-server - CONVERSION FAILED WHEN CONVERTING DATA/OR time 从字符串 VBA 到 SQL Server