#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]]
В этом случае мы выбираем все строки плюс столбцы, которые начинаются с цифры.