Python 如何在dataframe中按条件删除字符串值上的行?

Python 如何在dataframe中按条件删除字符串值上的行?,python,pandas,dataframe,filtering,Python,Pandas,Dataframe,Filtering,考虑一个数据帧,如: >>> import pandas as pd >>> df = pd.DataFrame(dict(url=['http://url1.com', 'http://www.url1.com', 'http://www.url2.com','http://www.url3.com','http://www.url1.com'])) >>> df 给予: url 0 htt

考虑一个数据帧,如:

>>> import pandas as pd
>>> df = pd.DataFrame(dict(url=['http://url1.com', 'http://www.url1.com', 'http://www.url2.com','http://www.url3.com','http://www.url1.com']))
>>> df
给予:

                   url
0      http://url1.com
1  http://www.url1.com
2  http://www.url2.com
3  http://www.url3.com
4  http://www.url1.com
我想删除包含url1.com和url2.com的所有行,以获得数据帧结果,如:

                   url
0   http://ww.url3.com
我这样做

domainToCheck = ('url1.com', 'url2.com')
goodUrl = df['url'].apply(lambda x : any(domain in x for domain in domainToCheck))
但这并没有给我任何结果

你知道如何解决上述问题吗

编辑:解决方案 你可以在这里用

如果要重置索引,请使用此

df[~df.url.str.contains('|'.join(domainToCheck))].reset_index(drop=True)

                   url
0  http://www.url3.com
你可以在这里用

如果要重置索引,请使用此

df[~df.url.str.contains('|'.join(domainToCheck))].reset_index(drop=True)

                   url
0  http://www.url3.com
使用,创建布尔掩码m,然后可以使用此布尔掩码过滤数据帧df:

m = df['url'].str.contains('|'.join(domainToCheck))
df = df[~m].reset_index(drop=True)
结果:

                   url
0  http://www.url3.com
使用,创建布尔掩码m,然后可以使用此布尔掩码过滤数据帧df:

m = df['url'].str.contains('|'.join(domainToCheck))
df = df[~m].reset_index(drop=True)
结果:

                   url
0  http://www.url3.com
如果我们检查域,我们应该找到100%匹配的域,而不是使用字符串contain。因为子域可能包含与域相同的密钥工作

import tldextract

s=df.url.map(lambda x : tldextract.extract(x).domain).isin(['url1','url2'])
Out[594]: 
0     True
1     True
2     True
3    False
4     True
Name: url, dtype: bool

df=df[~s]
如果我们检查域,我们应该找到100%匹配的域,而不是使用字符串contain。因为子域可能包含与域相同的密钥工作

import tldextract

s=df.url.map(lambda x : tldextract.extract(x).domain).isin(['url1','url2'])
Out[594]: 
0     True
1     True
2     True
3    False
4     True
Name: url, dtype: bool

df=df[~s]

“我想是的。joindomainToCheck更安全。”广浩是的,同意。改变了答案。谢谢你。我想。joindomainToCheck更安全。@QuangHoang是的,同意。改变了答案。谢谢。我相信ulr1和ulr2只是傻瓜。对于OP的实际数据,您的模式将很难接受。@Quanghaang更正。我相信ulr1和ulr2只是傻瓜。对于OP的实际数据,您的模式将很难接受。@Quanghaang更正。