Удаление столбцов, начинающихся с чисел

#python #pandas #string

#python #панды #строка

Вопрос:

У меня есть фрейм данных с несколькими столбцами, начинающимися с числа. Например,

 00am    00pm    02am    03am    10am    10k 11th    12th    13th ... ABC     JOIN
example example example ...       ...        ...       ...     ...  example  example
 

Я хотел бы удалить все столбцы, которые начинаются с числа, чтобы иметь

     ... ABC JOIN
...  example  example
 

Я использовал str и isdigit

 df.loc[:,~df.columns.str.isdigit()]
 

но результат по-прежнему показывает столбцы, начинающиеся с чисел. Аналогично я должен исключить столбцы, содержащие числа (я бы сказал, что в этом случае я должен использовать str.contain() ).

Ответ №1:

Используйте регулярное выражение для проверки имен столбцов

 df = pd.DataFrame([[1,2,3,4,5]],columns=['0a','0b','0c','0d','e'])

    0a  0b  0c  0d  e
0   1   2   3   4   5


df[df.columns[~df.columns.str.match('^d')]]

    e
0   5
 

Комментарии:

1. Хорошее решение, я не знал об этом методе. @Ch3steR Я тоже так думал изначально, но проверьте документы str.match , это правильно

2. @TobyPetty Да, верно. Я проверил документы. Нет необходимости добавлять ^ tho. Хорошее решение

3. Ну, я заметил, что @Val упомянул столбцы, «начинающиеся с чисел», поэтому не был уверен, нужно ли это. Val, вы можете сохранить ^ , если хотите удалить только столбцы, имена которых начинаются с чисел. Удалите ^ , если вы хотите удалить столбцы с номерами в любом месте имени.

4. не лучший вариант с регулярными выражениями, но вдохновленный вашим методом df.filter(regex='^[^d]') , тоже вариант.. уже проголосовал 🙂

5. вау, я сам не использовал фильтры. это приятно!

Ответ №2:

 import re
df[[c for c in df.columns if not re.findall("d", c[0])]]
 

Ответ №3:

Функции ‘Loc’ и ‘isdigit’ также могут использоваться, но не так, как вы хотели. Вы могли бы сделать это по-другому:

 df.loc[:, [x[0].isdigit() is False for x in df.columns]]
 

В этом случае мы выбираем все строки плюс столбцы, которые начинаются с цифры.