繁体   English   中英

Python Pandas-搜索两个数据框以查找特定列中的匹配字符串

[英]Python Pandas - Searching two dataframes for matching strings within a specific column

感谢您抽出宝贵的时间阅读我的问题。

我正在开发一个实时执行自定义Web流量监视的系统。 系统(在当前的alpha迭代中)每隔几分钟就会收到.txt流量的转储。 我称它为df_webtraffic。 该.txt有几列,其中之一是网络访问量的url字段。 我需要做的是,对于每一行的url条目(df_webtraffic.url),扫描另一个df(或系列,我不知道这有多重要,因为它只是一列)被禁止的网站(我将其称为黑名单) )。 黑名单很大(将近一百万个条目),因此效率非常重要。

我已经阅读了几十个论坛帖子,但是大多数主题似乎与查找特定字符串有关,而不是与系列中的匹配项有关。 如何在一个数据字段中扫描一列,并在另一数据字段或系列中查找对应的匹配项?

我已经编写了以下代码段: print y[y['URL'].str.contains[(blacklist)] ,它似乎可以正常工作……但从未完成。 我所期望的只是处理...处理...处理,但是系统监视器显示我的处理器几乎不会为python进程破坏5%,从未超过10%,并且通常为0%。 对于某些苛刻的要求,我希望它会消耗大量CPU。

有什么想法吗?

德鲁

更新:

我不清楚的一件事是,黑名单中的域并不一定总是与所单击的URL完全匹配-有人可以单击指向该域内子目录的url(例如www.website.com) /subdir/link.html),但是我需要与此对应的黑名单条目只能是www.website.com。 因此,我需要查看所单击的url中的条目是否包含黑名单中的任何条目,即使它与显式匹配也不行。

我建议为黑名单创建一个哈希表。 这包括使用某种算法将url转换为数字(例如,对每个字符使用ASCII码),然后除以大质数。 质数越大,冲突次数越少。 哈希表将包含结果数,字符串和一系列冲突的指针。 首先,您将需要一个相当长的过程来设置哈希表,但是如果冲突次数较少,则查找过程应该很快。

有关哈希算法的更多详细信息,请参见: https//en.wikipedia.org/wiki/Hash_function

为了在大型数据集中复制您的任务,我下载了2016年总统竞选财务中所有捐款的csv文件作为示例。

我首先导入一个Pandas DataFrame。

import pandas as pd

funding = pd.read_csv('P00000001-ALL.csv')

然后,我随机选择10000个供稿者邮政编码作为黑名单

zip_list = funding['contbr_zip'].unique()
blacklist = pd.DataFrame(zip_list, columns=['contbr_zip']).sample(n=10000)

过滤发生在这里:

selection = funding['contbr_zip'].isin(blacklist['contbr_zip'])
filtered_df = funding[~selection]

现在, filtered_df仅包含贡献者邮政编码不在黑名单中的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM