如何更新 Polars 数据帧中的单个值?

How to update a single value in Polars dataframe?

提问人:Laurent 提问时间:4/23/2023 更新时间:4/23/2023 访问量:470

问:

在 Pandas 中,您可以使用 at 属性更新值,如下所示:

import pandas as pd

df = pd.DataFrame({"col1": [1, 2, 3], "col2": [4, 5, 6]})
df.at[2, "col2"] = 99

print(df)
# Output

   col1  col2
0     1     4
1     2     5
2     3    99

在 Polars 中这样做的惯用方法是什么?

pandas 数据帧 python-polars setvalue

评论

1赞 RomanPerekhrest 4/23/2023
df[[2], "col2"] = 99

答:

2赞 ignoring_gravity 4/23/2023 #1

您可以使用 when-then-else:

df.with_row_count().with_columns(
    col2=pl.when(pl.col("row_nr") == 2)
    .then(99)
    .otherwise(pl.col("col2"))
).drop("row_nr")

例:

In [5]: df.with_row_count().with_columns(col2=pl.when(pl.col('row_nr')==2).then(99).otherwise(pl.col('col2'))).drop('row_nr')
Out[5]:
shape: (3, 2)
┌──────┬──────┐
│ col1 ┆ col2 │
│ ---  ┆ ---  │
│ i64  ┆ i64  │
╞══════╪══════╡
│ 1    ┆ 4    │
│ 2    ┆ 5    │
│ 3    ┆ 99   │
└──────┴──────┘

不过,这似乎有点冗长,所以我很好奇其他答案是否会建议更简单的东西

6赞 Timeless 4/23/2023 #2

您可以使用极坐标的方括号索引

df = pl.DataFrame({"col1": [1, 2, 3], "col2": [4, 5, 6]})
​
df[2, "col2"] = 99 #same syntax as pandas but without the `.at`

​ 输出:

print(df)
​
shape: (3, 2)
┌──────┬──────┐
│ col1 ┆ col2 │
│ ---  ┆ ---  │
│ i64  ┆ i64  │
╞══════╪══════╡
│ 1    ┆ 4    │
│ 2    ┆ 5    │
│ 3    ┆ 99   │
└──────┴──────┘