ast*_*nlu 1 python python-polars
给定一个 Polars DataFrame,有没有办法用“null”替换特定值?例如,如果有一个像这样的哨兵值"_UNKNOWN",我想让它在数据框中真正缺失。
[更新]: \nExpr.replace()现在是执行此操作的惯用方法(另请参阅@asterix\ 的示例)
df.with_columns(pl.col(pl.Utf8).replace("_UNKNOWN", None))\nRun Code Online (Sandbox Code Playgroud)\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\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\nRun Code Online (Sandbox Code Playgroud)\n您可以使用.when().then().otherwise()
pl.col(pl.Utf8)用于选择所有“字符串列”。
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)\nRun Code Online (Sandbox Code Playgroud)\n
这实际上是对@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)