是一个数据帧(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个,而且还有一些像这种数据帧的数据帧。我想以常用方法处理此问题。 感谢
答案 0 :(得分:3)
将boolean indexing
与DataFrame.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