按条件选择行

时间:2015-12-14 05:44:43

标签: python string pandas dataframe

我有一个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])

现在,我如何使用此数组删除列?

2 个答案:

答案 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]