You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas使用isin进行字符串反向筛选返回错误结果的问题求助

问题原因及解决方法

嘿,我来帮你捋清楚这个问题哈~你现在的代码之所以返回全部域名,核心问题出在isin()方法的使用上。

问题根源

isin()方法是用来判断整个字符串是否完全匹配列表中的某一项的,但你的两个列表:

  • tld_1里的.de、.cn只是域名的后缀部分,不是完整的域名(比如info.de和.de完全不一样)
  • tld_2里的info、stack只是域名的前缀部分,同样不是完整域名

所以df['Domain'].isin(tld_1)和df['Domain'].isin(tld_2)的结果全是False,取反~之后就全变成True,自然会返回所有域名啦。

正确的筛选方案

根据你的需求(匹配前缀或后缀),我们可以用Pandas的字符串方法来实现:

1. 筛选以指定后缀结尾的域名

用str.endswith()方法,它支持传入一个后缀列表(需要转成元组):

import pandas as pd
df = pd.DataFrame({'Domain':['info.de','onfi.ru','kcast.fr','stack.cn']})
tld_1 =['.de', '.cn']

# 筛选以tld_1中任意后缀结尾的域名
filtered_tld = df[df['Domain'].str.endswith(tuple(tld_1))]
print(filtered_tld)

运行结果:

Domain
0    info.de
3    stack.cn

2. 筛选以指定前缀开头的域名

用str.startswith()方法,同样支持列表转元组:

tld_2 =['info', 'stack']

# 筛选以tld_2中任意前缀开头的域名
filtered_prefix = df[df['Domain'].str.startswith(tuple(tld_2))]
print(filtered_prefix)

运行结果也是你想要的两个域名:

Domain
0    info.de
3    stack.cn

3. 额外:筛选包含指定子串的域名

如果你的需求是域名中任意位置包含这些字符串,还可以用str.contains():

# 用|连接列表中的子串,实现多匹配
filtered_contains = df[df['Domain'].str.contains('|'.join(tld_2))]
print(filtered_contains)

内容的提问来源于stack exchange,提问作者user3732793

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:37:27