You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中用指定值覆盖时间序列某一时间段的数据?

在Polars中替换特定时间段内的错误数据

Polars采用不可变数据结构设计,无法像Pandas那样直接通过索引切片赋值,需通过条件表达式实现批量替换。以下是两种实用方案:

方法1:with_columns + 条件判断(直观易读)

通过pl.when().then().otherwise()构造逻辑,对符合时间段条件的行替换指定值,其余行保留原数据:

import polars as pl
from datetime import datetime

# 示例数据集
df = pl.DataFrame({
    "datetime": [
        datetime(2023, 1, 1, 10),
        datetime(2023, 1, 1, 11),
        datetime(2023, 1, 1, 12),
        datetime(2023, 1, 1, 13),
        datetime(2023, 1, 1, 14)
    ],
    "value": [10, 20, 999, 40, 50]
})

# 定义替换规则
start_dt = datetime(2023, 1, 1, 11, 30)
end_dt = datetime(2023, 1, 1, 12, 30)
replace_val = 30

# 执行替换操作
df_updated = df.with_columns(
    pl.when(pl.col("datetime").is_between(start_dt, end_dt))
    .then(replace_val)
    .otherwise(pl.col("value"))
    .alias("value")
)

方法2:Lazy API的update(适合大数据集)

若处理大体积数据,用Lazy模式可优化执行效率,通过update结合where实现精准替换:

df_updated = df.lazy().update(
    pl.col("value").set(replace_val).where(pl.col("datetime").is_between(start_dt, end_dt))
).collect()

核心注意点

  • Polars的DataFrame默认不可变,所有修改操作都会返回新的DataFrame,需用变量接收结果
  • 避免用filter筛选行后赋值:filter返回的是原数据的子集副本,修改副本不会影响原数据集,必须通过全局条件判断覆盖目标行

内容的提问来源于stack exchange,提问作者sobek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:50:39