Есть ли эффективный способ включить каждый оставшийся невыделенный столбец в выбор полярностей Python?

Я пытаюсь изменить порядок столбцов в фрейме данных Polars и сначала поместить 5 столбцов из 100 (к сожалению, документ должен быть читабелен в Excel). Кажется, я не могу найти простой способ сделать это.

В идеале мне бы хотелось что-то простое, например

df.select(
    'col2',
    'col1',
    r'^.*$',  # the rest of the columns, but this throws a duplicate column name error
)

Отрицательный просмотр вперед не поддерживается, поэтому невозможно создать регулярное выражение, исключающее выбранные мной столбцы. Я мог бы сделать два перекрывающихся выделения, удалить столбцы из одного выделения, а затем соединить их, но, похоже, это не тот способ сделать это. Любое другое решение, которое я нашел, предполагает явное присвоение имени каждому отдельному столбцу, чего я стараюсь избегать, поскольку столбцы довольно часто добавляются или меняют имена.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Он предполагает двойное именование столбцов, но вы можете их исключить:

df.select('col2', 'col1', pl.exclude('col1', 'col2'))

Вы можете сохранить имена в переменной, чтобы избежать дублирования.

Пример:

df = pl.DataFrame(schema=list('abcdefg'))

cols = 'g', 'e'

df.select(*cols, pl.exclude(cols))
shape: (0, 7)
┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐
│ g    ┆ e    ┆ a    ┆ b    ┆ c    ┆ d    ┆ f    │
│ ---  ┆ ---  ┆ ---  ┆ ---  ┆ ---  ┆ ---  ┆ ---  │
│ null ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null │
╞══════╪══════╪══════╪══════╪══════╪══════╪══════╡
└──────┴──────┴──────┴──────┴──────┴──────┴──────┘

Существует открытый запрос функции, позволяющий разрешить df.select('col2', 'col1', ...)

Ответ принят как подходящий

Можно совместить pl.exclude с оператором морж.

Предположим, у вас есть что-то вроде

df=pl.DataFrame(
    [
        pl.Series('c', [1, 2, 3], dtype=pl.Int64),
        pl.Series('b', [2, 3, 4], dtype=pl.Int64),
        pl.Series('fcvem', [4, 5, 6], dtype=pl.Int64),
        pl.Series('msoy', [4, 5, 6], dtype=pl.Int64),
        pl.Series('smrn', [4, 5, 6], dtype=pl.Int64),
        pl.Series('z', [4, 5, 6], dtype=pl.Int64),
        pl.Series('wxous', [4, 5, 6], dtype=pl.Int64),
        pl.Series('uusn', [4, 5, 6], dtype=pl.Int64),
        pl.Series('ydj', [4, 5, 6], dtype=pl.Int64),
        pl.Series('squr', [4, 5, 6], dtype=pl.Int64),
        pl.Series('yyx', [4, 5, 6], dtype=pl.Int64),
        pl.Series('nl', [4, 5, 6], dtype=pl.Int64),
        pl.Series('a', [0, 1, 2], dtype=pl.Int64),
    ]
)

и вы хотите, чтобы первые три столбца были «a», «b», «c». Вы можете сделать:

df.select(*(start_cols:=['a','b','c']), pl.exclude(start_cols))

Это создает список с именем start_cols, который содержит «a», «b», «c». Звездочка разворачивает список, а затем pl.exclude использует содержимое start_cols, чтобы указать полярам вернуть все, кроме start_cols.

Если хотите, вместо этого вы можете использовать следующий синтаксис:

df.select((start_cols:=['a','b','c'])+ [pl.exclude(start_cols)])

Спасибо! Это очень похоже на то, что я сделал с помощью @jqurious: просто сделал отдельный список COLUMNS = ['col2', 'col1'] df = df.select(pl.col(COLUMNS), pl .exclude(COLUMNS)) Хотя ваше решение более элегантно, мне полезно иметь этот список в другом месте.

crazydragon777 22.08.2024 19:08

Другие вопросы по теме