如何在Pandas列中匹配URL模式并过滤指定网站链接
简便筛选包含指定站点的Pandas URL列
嘿,我懂你要的需求——不用折腾urlparse这类工具,直接从你的URL列里筛选出包含forbes、bloomberg这类标识的链接对吧?这事儿用Pandas自带的字符串处理方法就能轻松搞定,比你之前尝试的写法简单多了,而且效率还高~
核心思路:用str.contains做模糊匹配
Pandas的str.contains方法专门用来检查字符串列里的每个条目是否包含指定的子串,我们可以把目标站点标识拼成一个正则表达式,一次性匹配所有目标:
import pandas as pd # 第一步:定义你的目标站点标识数组 target_domains = ['forbes', 'bloomberg'] # 把数组转成正则"或"表达式,比如'forbes|bloomberg' match_pattern = '|'.join(target_domains) # 第二步:筛选符合条件的行 # case=False:忽略大小写,能匹配FORBES.com、Bloomberg这类混合大小写的链接 # na=False:把空值/非字符串的URL排除,避免报错 filtered_df = df[df['URL'].str.contains(match_pattern, case=False, na=False)]
额外需求:给原表加标记列
如果你不想直接筛选,而是想给每条URL加个“是否属于目标站点”的标记列,可以这么写:
df['is_target_site'] = df['URL'].str.contains(match_pattern, case=False, na=False)
执行后,原DataFrame会新增一列is_target_site,值为True的就是包含目标标识的URL。
为啥你的之前写法不太对?
match方法默认是匹配整个字符串的开头,而你要的是URL里任意位置包含站点标识,所以contains才是正确选择;- 用
apply虽然也能实现,但Pandas的向量化字符串方法(比如str.contains)是底层优化过的,处理大数据集时速度会比apply快很多。
举个实际例子:如果你的URL列有这些值:
www.forbes.com/finance/2024bloomberg.com/marketswww.cnn.com/world
筛选后会留下前两条,完美符合你的需求~
内容的提问来源于stack exchange,提问作者inneb
相关产品推荐
相关产品推荐

