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() 行中带有超链接的主要内容,如果未能解决你的问题,请参考以下文章