我有一个pandas数据框:
df_total_data2
包含以下列:
df_total_data.columns
Index([u'BBBlink', u'Name', u'_type'], dtype='object')
我想删除所有不满足给定条件的行,在这种情况下条件是该列不能包含单词secure
我想在该地方放置行,如果条件不符合,则不要返回None
的函数。
所以我写这个函数:
df_total_data.apply(lambda x: 'secure' not in x['BBBlink'],1 ).values
返回一个布尔数组,但我不知道如何使用它来删除该行。
编辑:
我有一个阵列:
array([ True, True, True, True, True,False....True])
现在,我如何使用此数组删除列?
答案 0 :(得分:1)
IIUC你可以使用isin:
print df_total_data
BBBlink Name _type
0 secure name A
1 secure name A
2 secure name A
3 secure name A
4 secure name A
5 sre name A
print df_total_data.BBBlink.isin(['secure'])
0 True
1 True
2 True
3 True
4 True
5 False
Name: BBBlink, dtype: bool
print df_total_data[df_total_data.BBBlink.isin(['secure'])]
BBBlink Name _type
0 secure name A
1 secure name A
2 secure name A
3 secure name A
4 secure name A
print df_total_data[~df_total_data.BBBlink.isin(['secure'])]
BBBlink Name _type
5 sre name A
但如果字符串与其他字符串一起使用,则可以使用str.contains:
print df_total_data
BBBlink Name _type
0 secure qq name A
1 secure name A
2 secure name A
3 secure name A
4 secure aa ss name A
5 sre name A
print df_total_data[~df_total_data.BBBlink.str.contains('secure')]
BBBlink Name _type
5 sre name A
答案 1 :(得分:1)
获得布尔数组后,您可以通过True
仅选择df[boolean_array]
的行,或者只添加False
的{{1}}行, ~
。
至于你的问题,你可以使用df[~boolean_array]
方法或自己动手:
drop
请记住,这不存在,因此您需要将返回的值分配给新的数据帧,或者将其重新分配给现有的数据帧。
顺便说一句,你可以稍微简化你的状况:
df_total_data[df_total_data.apply(lambda x: 'secure' not in x['BBBlink'],1 ).values]