Python Pandas str.contains() 行中带有超链接

Posted

技术标签:

【中文标题】Python Pandas str.contains() 行中带有超链接【英文标题】:Python Pandas str.contains() with hyperlinks in rows 【发布时间】:2021-12-09 12:10:34 【问题描述】:

我有两个这样的熊猫数据框:

df1

site link
retailer_site1 https://www.retailer_site1.com
... ...
retailer_siteX https://www.retailer_siteX.com

df2

site link
retailer_site1 https://www.retailer_site1.com
... ...
retailer_siteY https://www.retailer_siteY.com

所以我想通过 df2 并在 df1 中找到来自 df2 的链接实例。这是我的代码:

    for row in df2['link'].astype(str):
        boolean_findings = df1['link'].str.contains(row)

当我打印 boolean_findings 时,我得到的都是假的,我知道这不可能是真的,因为我在我的 excel 文件上看到本地匹配:

boolean_findings
False
False
...
False

我想知道的是为什么超链接字符串文本与第一个 df 上的等价物不匹配,我该怎么做才能匹配网站。

【问题讨论】:

你必须这样做吗?您可以合并链接在 df1 中的两个数据框吗? df2["link"].isin(df1["link"]) @brb 因为 df.merge() 出现零匹配。 dtype 存在问题,或者它彼此不匹配。 @Riley 这是一个优化,谢谢。布尔值仍然显示为 false,因此数据框中的超链接一定有问题。 似乎很可能只有字母字符就足以唯一标识列,所以我会尝试在每个数据集中创建一个列(使用正则表达式替换)然后尝试排序使用isin() 莱利推荐。如果这不起作用,请尝试发布更大的代码,或者只是废弃它并重新开始,因为这可能是一些“d'oh”级别的错误。 【参考方案1】:

我看了看,发现有些网站的链接中包含(),这可能会导致链接失效

在比较链接时,您似乎只需要考虑字母数字/下划线字符,您可以使用

df2["link"].str.replace(r'\W+','', regex=True).isin(
    df1["link"].str.replace(r'\W+','', regex=True))

.str.replace(r'\W+','', regex=True) 部分将从链接中删除除字母、变音符号、数字和连接符标点之外的任何字符(其中最常见的字符是下划线)。

【讨论】:

我在替换时收到以下正则表达式错误:TypeError: replace() takes no keyword arguments。当我删除regex=True 时,它不会出错,但也不会替换它。我想我会查看re 模块来解决这个问题,但感谢您让我走上正确的道路! @GH 确保您使用的是最新的 Pandas 版本。 pip install -U pandas。此代码已针对您的数据进行了测试并证明有效。

以上是关于Python Pandas str.contains() 行中带有超链接的主要内容,如果未能解决你的问题,请参考以下文章

python(pandas模块)?

python(pandas模块)?

python怎么打开pandas

Python pandas用法

python pandas dataframe 写入hdfs

python--pandas删除