对于字符串isin list的Pandas否定选择给出了错误的结果

use*_*793 2 python string substring series pandas

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

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)]
Run Code Online (Sandbox Code Playgroud)

但它带回来了

 Domain
0   info.de
1   onfi.ru
2  kcast.fr
3  stack.cn
Run Code Online (Sandbox Code Playgroud)

知道为什么以及如何正确选择包含列表中条目的域名?

提前感谢任何提示.

jpp*_*jpp 5

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

您可以通过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
Run Code Online (Sandbox Code Playgroud)