python3:删除列的值是某个值的列

时间:2018-04-08 10:40:34

标签: python-3.x pandas dataframe

是一个数据帧(df1),如下所示:

 eye_l   eye_r    nose       mouse       ear     eyebrow_l  eyebrow_r  ...
  34_35_a -1_-1_-1  45_66_b    45_64_a     78_87_a  -1_-1_-1   -1_-1_-1
  35_38_a -1_-1_-1  75_76_b    -1_-1_-1     38_79_a -1_-1_-1 -1_-1_-1
  64_43_a -1_-1_-1  85_66_b    65_45_a     87_45_a  -1_-1_-1  -1_-1_-1
   ....................................................................

我想删除列的所有值都是-1_-1_-1的列(例如eye_r,eyebrow_1,eyebrow_r),请注意某些列可能有一个数字(不是全部)值将保留-1_-1_-1。

我知道有代码如:

df1. drop(['eye_r', 'eyebrow_l', 'eyebrow_r '], axis=1, inplace=True)

但是所有值都是-1_-1_-1列不仅仅是三个,可能有100个,而且还有一些像这种数据帧的数据帧。我想以常用方法处理此问题。 感谢

1 个答案:

答案 0 :(得分:3)

boolean indexingDataFrame.all一起使用,并将条件更改为!=DataFrame.any使用~的反转掩码:

df = df.loc[:, (df != '-1_-1_-1').any()]

或者:

df = df.loc[:, ~(df == '-1_-1_-1').all()]

print (df)
     eye_l     nose     mouse      ear
0  34_35_a  45_66_b   45_64_a  78_87_a
1  35_38_a  75_76_b  -1_-1_-1  38_79_a
2  64_43_a  85_66_b   65_45_a  87_45_a

详情:

print (df != '-1_-1_-1')
   eye_l  eye_r  nose  mouse   ear  eyebrow_l  eyebrow_r
0   True  False  True   True  True      False      False
1   True  False  True  False  True      False      False
2   True  False  True   True  True      False      False

print ((df != '-1_-1_-1').any())
eye_l         True
eye_r        False
nose          True
mouse         True
ear           True
eyebrow_l    False
eyebrow_r    False
dtype: bool