python3: удалить столбцы, значение столбцов которых является определенным значением

avatar
tktktk0711
8 апреля 2018 в 10:40
33
1
1

Это кадр данных (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), и обратите внимание, что некоторые столбцы могут иметь числовое значение (не все) is -1_-1_-1 будет сохранен.

Я знаю, что есть такой код:

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

Но все значения -1_-1_-1 столбцов не только три, их может быть 100, а также есть несколько фреймов данных, подобных такому фрейму данных. Я хочу обработать эту проблему общим методом. Спасибо

Источник

Ответы (1)

avatar
jezrael
8 апреля 2018 в 10:47
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
jezrael
8 апреля 2018 в 10:56
0

@tktktk0711- Рад помочь!