将 Polar 中的值替换为 null

ast*_*nlu 1 python python-polars

给定一个 Polars DataFrame,有没有办法用“null”替换特定值?例如,如果有一个像这样的哨兵值"_UNKNOWN",我想让它在数据框中真正缺失。

jqu*_*ous 8

[更新]: \nExpr.replace()现在是执行此操作的惯用方法(另请参阅@asterix\ 的示例

\n
df.with_columns(pl.col(pl.Utf8).replace("_UNKNOWN", None))\n
Run Code Online (Sandbox Code Playgroud)\n
shape: (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\x90\n\xe2\x94\x82 A    \xe2\x94\x86 B    \xe2\x94\x86 C   \xe2\x94\x82\n\xe2\x94\x82 ---  \xe2\x94\x86 ---  \xe2\x94\x86 --- \xe2\x94\x82\n\xe2\x94\x82 str  \xe2\x94\x86 str  \xe2\x94\x86 i64 \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\xa1\n\xe2\x94\x82 a    \xe2\x94\x86 null \xe2\x94\x86 1   \xe2\x94\x82\n\xe2\x94\x82 b    \xe2\x94\x86 d    \xe2\x94\x86 2   \xe2\x94\x82\n\xe2\x94\x82 null \xe2\x94\x86 e    \xe2\x94\x86 3   \xe2\x94\x82\n\xe2\x94\x82 c    \xe2\x94\x86 f    \xe2\x94\x86 4   \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\x98\n
Run Code Online (Sandbox Code Playgroud)\n
\n

您可以使用.when().then().otherwise()

\n

pl.col(pl.Utf8)用于选择所有“字符串列”。

\n
df = pl.DataFrame({\n   "A": ["a", "b", "_UNKNOWN", "c"], \n   "B": ["_UNKNOWN", "d", "e", "f"], \n   "C": [1, 2, 3, 4]\n})\n\ndf.with_columns(\n   pl.when(pl.col(pl.Utf8) == "_UNKNOWN")\n     .then(None)\n     .otherwise(pl.col(pl.Utf8)) # keep original value\n     .name.keep()\n)\n
Run Code Online (Sandbox Code Playgroud)\n


Dea*_*gor 5

这实际上是对@jqurious 答案的调整。

当您执行 awhen并且不满足您的条件时,默认情况null下您可以执行以下操作:

df.with_columns(
    pl.when(pl.col(pl.Utf8) != "_UNKNOWN")
        .then(pl.col(pl.Utf8)) # keep original value
        .keep_name()
)
Run Code Online (Sandbox Code Playgroud)

如果您有多个空条件,那么null_strings=["_UNKNOWN", "UNK", "who_knows"]您可以使用is_in如下所示:

df.with_columns(
    pl.when(~pl.col(pl.Utf8).is_in(null_strings))
        .then(pl.col(pl.Utf8)) # keep original value
        .keep_name()
)
Run Code Online (Sandbox Code Playgroud)