提问人:Laurent 提问时间:4/23/2023 更新时间:4/23/2023 访问量:470
如何更新 Polars 数据帧中的单个值?
How to update a single value in Polars dataframe?
问:
在 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 中这样做的惯用方法是什么?
答:
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 │
└──────┴──────┘
评论
df[[2], "col2"] = 99