pie*_*etz 2 python dataframe python-polars
我想根据条件选择 Polars DataFrame 中的列。就我而言,我想选择唯一值少于 100 个的所有字符串列。我天真地尝试过:
df.select((pl.col(pl.Utf8)) & (pl.all().n_unique() < 100))
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误,这可能是由于表达式的第二部分造成的。
df.select(pl.all().n_unique() < 100)
Run Code Online (Sandbox Code Playgroud)
这不会选择列,而是返回布尔值的单行 DataFrame。我想,我是极坐标新手,但仍然不能完全理解表达式 API。我究竟做错了什么?
如果您提供一个示例以使其他人免于创建示例,将会很有帮助。
\ndf = pl.DataFrame({\n "col1": ["A", "B", "C", "D"],\n "col2": ["A", "A", "C", "A"],\n "col3": ["A", "B", "A", "B"],\n "col4": [1, 2, 3, 4],\n})\n
Run Code Online (Sandbox Code Playgroud)\n您正在选择字符串列pl.col(pl.Utf8)
>>> df.select(pl.col(pl.Utf8))\nshape: (4, 3)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 col1 | col2 | col3 \xe2\x94\x82\n\xe2\x94\x82 --- | --- | --- \xe2\x94\x82\n\xe2\x94\x82 str | str | str \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 A | A | A \xe2\x94\x82\n\xe2\x94\x82 B | A | B \xe2\x94\x82\n\xe2\x94\x82 C | C | A \xe2\x94\x82\n\xe2\x94\x82 D | A | B \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n您可以链接.n_unique()
到pl.col()
仅在这些列上运行它。
>>> df.select(pl.col(pl.Utf8).n_unique() < 3)\nshape: (1, 3)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 col1 | col2 | col3 \xe2\x94\x82\n\xe2\x94\x82 --- | --- | --- \xe2\x94\x82\n\xe2\x94\x82 bool | bool | bool \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 false | true | true \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n您可以循环此结果并提取.name
每true
列的 。
没有.is_true()
但.all()
等价。
>>> [ col.name for col in df.select(pl.col(pl.Utf8).n_unique() < 3) if col.all() ]\n['col2', 'col3']\n
Run Code Online (Sandbox Code Playgroud)\n然后您可以仅选择这些列:
\ndf.select(\n col.name for col in \n df.select(pl.col(pl.Utf8).n_unique() < 3) \n if col.all()\n)\n
Run Code Online (Sandbox Code Playgroud)\nshape: (4, 2)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 col2 | col3 \xe2\x94\x82\n\xe2\x94\x82 --- | --- \xe2\x94\x82\n\xe2\x94\x82 str | str \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 A | A \xe2\x94\x82\n\xe2\x94\x82 A | B \xe2\x94\x82\n\xe2\x94\x82 C | A \xe2\x94\x82\n\xe2\x94\x82 A | B \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n