Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot use selector in polars.DataFrame.unpivot()

I cannot use the pl.exclude() selector as index in pl.DataFrame.unpivot despite the documentation of this method type hinting the index parameter as follows.

index: 'ColumnNameOrSelector | Sequence[ColumnNameOrSelector] | None' = None

The follow code can be used to reproduce the error.

import polars as pl

df = pl.DataFrame({
    'foo' : ['one', 'two', 'three'],
    'bar' : ['four', 'five', 'six'],
    'baz' : [10, 20, 30],
    'qux' : [50, 60, 70]
})

column_list = ['baz', 'qux']
df.unpivot(column_list, index=pl.exclude(column_list))
TypeError: argument 'index': 'Expr' object cannot be converted to 'PyString'

Moreover, using the columns explicitly works fine.

df.unpivot(column_list, index=['foo', 'bar'])

So, how can column selectors be used in pl.DataFrame.unpivot?

like image 474
Kazdegotepu Avatar asked Oct 29 '25 02:10

Kazdegotepu


1 Answers

pl.exclude is a "regular" polars expression (of type pl.Expr). Selectors are special objects (also expressions, but of a specific subtype cs._selector_proxy_) that can be found in pl.selectors.

import polars.selectors as cs

column_list = ['baz', 'qux']
df.unpivot(column_list, index=cs.exclude(column_list))
shape: (6, 4)
┌───────┬──────┬──────────┬───────┐
│ foo   ┆ bar  ┆ variable ┆ value │
│ ---   ┆ ---  ┆ ---      ┆ ---   │
│ str   ┆ str  ┆ str      ┆ i64   │
╞═══════╪══════╪══════════╪═══════╡
│ one   ┆ four ┆ baz      ┆ 10    │
│ two   ┆ five ┆ baz      ┆ 20    │
│ three ┆ six  ┆ baz      ┆ 30    │
│ one   ┆ four ┆ qux      ┆ 50    │
│ two   ┆ five ┆ qux      ┆ 60    │
│ three ┆ six  ┆ qux      ┆ 70    │
└───────┴──────┴──────────┴───────┘
like image 121
Hericks Avatar answered Oct 30 '25 16:10

Hericks



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!