Python 字符串isin列表的负选择给出了错误的结果

Python 字符串isin列表的负选择给出了错误的结果,python,string,pandas,substring,series,Python,String,Pandas,Substring,Series,根据这里的其他帖子,这应该只带回四个域中的两个 import pandas as pd df = pd.DataFrame({'Domain':['info.de','onfi.ru','kcast.fr','stack.cn']}) tld_1 =['.de', '.cn'] tld_2 =['info', 'stack'] df[~df['Domain'].isin(tld_1)] df[~df['Domain'].isin(tld_2)] 但它会让你恢复元气 Domain 0

根据这里的其他帖子,这应该只带回四个域中的两个

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

tld_1 =['.de', '.cn']
tld_2 =['info', 'stack']

df[~df['Domain'].isin(tld_1)]
df[~df['Domain'].isin(tld_2)]
但它会让你恢复元气

 Domain
0   info.de
1   onfi.ru
2  kcast.fr
3  stack.cn
知道我为什么以及如何正确选择包含列表中条目的域吗


提前感谢您的提示。

pd.Series.isin测试成员资格,但您希望测试字符串中的子字符串

您可以通过使用regex的pd.Series.str.contains来执行此操作,注意转义字符

import re

regex1 = '|'.join([re.escape(i) for i in tld_1])
regex2 = '|'.join([re.escape(i) for i in tld_2])

res1 = df[df['Domain'].str.contains(regex1)]
res2 = df[df['Domain'].str.contains(regex2)]

print(len(res1.index))  # 2
print(len(res2.index))  # 2