Отрицательный выбор панд для строки в списке дает неправильный результат - PullRequest
0 голосов
/ 09 мая 2018

Согласно другим сообщениям здесь должно быть возвращено только два из четырех доменов

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

Есть идеи, как и как правильно выбрать домены, содержащие записи в списках?

Заранее спасибо за любую подсказку.

1 Ответ

0 голосов
/ 09 мая 2018

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
...