2025, Oct 01 13:17
Как удалить первый столбец в Polars DataFrame с селекторами
Идиоматичный способ удалить первый столбец в Polars DataFrame с помощью селекторов by_index. Без громоздких списков и ошибок типов: лаконичный и надежный код.
Удалить первый столбец в DataFrame Polars кажется простой задачей, но очевидное решение не всегда лежит на поверхности. Если вы пробовали собирать список имён столбцов вручную или исключать через выражение, наверняка столкнулись с многословностью или ошибкой типов. Ниже — аккуратный, идиоматичный способ сделать это с помощью селекторов.
Постановка задачи
Нужно удалить первый столбец из DataFrame Polars.
Наивный способ: работает, но выглядит коряво
Метод формирует отфильтрованный список имён столбцов и передаёт его в select. Работает, но не изящно:
outcome = table.select([name for pos, name in enumerate(table.columns) if pos != 0])
Попытка, которая падает с ошибкой типов
Исключение через выражение приводит к ошибке:
sheet.select(pl.exclude(pl.nth(0)))
TypeError: invalid input for `exclude`
Expected one or more `str` or `DataType`; found <Expr ['cs.nth(1, require_all=true)'] at 0x21A964B6350> instead.
Почему так происходит
API exclude ожидает реальные имена столбцов или значения DataType. Передача объекта выражения там не поддерживается — именно об этом и говорит сообщение об ошибке. В итоге списковое выражение получается многословным, а исключение на основе выражения неприменимо для этой задачи.
Решение: селекторы и операции множеств
Селекторы Polars дают лаконичный и наглядный способ обращаться к столбцам по позиции и комбинировать их через операции множеств. Чтобы убрать первый столбец, просто инвертируйте селектор для нулевого индекса при выборе:
from polars import selectors as sx
grid.select(~sx.by_index(0))
Если вам ближе запись через операции множеств или синтаксис исключения, подойдут и такие варианты:
from polars import selectors as sx
grid.select(sx.all() - sx.by_index(1))
grid.select(sx.exclude(sx.by_index(1)))
Зачем это знать
Селекторы делают код короче и понятнее, избавляют от хрупких манипуляций со списками и соответствуют документированным идиоматическим приёмам. Такой код проще читать с первого взгляда и он менее подвержен ошибкам, чем ручная сборка списков столбцов. Если видите ошибки про неверный ввод для exclude, это сигнал перейти на селекторы вместо передачи выражений там, где ожидаются имена или типы.
Итог
Чтобы удалить столбец по позиции, используйте селекторы. Самый лаконичный способ убрать первый столбец:
from polars import selectors as sx
grid.select(~sx.by_index(0))
Возьмите этот приём на вооружение и забудьте про громоздкую фильтрацию списков или несовместимые вызовы exclude.
Статья основана на вопросе с StackOverflow от robertspierre и ответе Dean MacGregor.