如何在Polars中实现替换前n行特定值的等效操作?
Polars中替换前n行为特定值的等效操作
要实现和Pandas里df_pd.iloc[0:5] = float("nan")相同的效果,在Polars里可以通过条件表达式或update方法完成,以下是具体示例:
方法1:使用条件表达式(推荐,符合Polars不可变设计)
通过pl.when()判断行索引范围,对前n行替换为目标值(这里用None对应Polars的空值,等价于Pandas的NaN):
import polars as pl df = pl.DataFrame({"test": range(10)}) # 替换前5行为空值 df_updated = df.with_columns( pl.col("test").when(pl.row_index() < 5).then(None).keep_name() ) print(df_updated)
运行结果:
shape: (10, 1) ┌──────┐ │ test │ │ --- │ │ i64 │ ├──────┤ │ null │ │ null │ │ null │ │ null │ │ null │ │ 5 │ │ 6 │ │ 7 │ │ 8 │ │ 9 │ └──────┘
方法2:使用update方法(原地修改风格)
如果习惯Pandas的原地修改逻辑,也可以用update()配合过滤器实现:
import polars as pl df = pl.DataFrame({"test": range(10)}) # 原地更新前5行为空值 df.update(pl.col("test").set(None).filter(pl.row_index() < 5)) print(df)
注意点
- Polars默认采用不可变数据结构,推荐使用方法1返回新DataFrame的方式,避免原地修改带来的副作用;
- 若需要替换为其他特定值,只需把代码中的
None换成目标值即可(比如0、"custom_value"等)。
内容的提问来源于stack exchange,提问作者Kevin Li
相关产品推荐
相关产品推荐

