Polars给日期增减30天未生成新列,请求排查代码错误
Polars日期增减未生成新列问题排查
问题重现
尝试用Polars给日期列增减30天,执行代码无报错,但未生成预期的date_plus_delta和date_minus_delta新列,原代码及输出如下:
原代码
import polars as pl df = pl.DataFrame( {"start_date": ["2020-01-02", "2020-01-03", "2020-01-04"]}) df = df.with_columns( pl.col("start_date").str.to_date() ) # Generate the days above and below df = df.with_columns( pl.col("start_date") + pl.duration(days=30).alias("date_plus_delta") ) df = df.with_columns( pl.col("start_date") + pl.duration(days=-30).alias("date_minus_delta") ) print(df)
原输出
shape: (3, 1) ┌────────────┐ │ start_date │ │ --- │ │ date │ ╞════════════╡ │ 2020-01-02 │ │ 2020-01-03 │ │ 2020-01-04 │ └────────────┘
问题原因
错误出在alias()的位置:你把alias()加在了pl.duration()对象上,而不是整个日期运算表达式上。这导致Polars仅给duration值命名,未将整个运算结果作为新列添加到DataFrame中。
修正后的代码
import polars as pl df = pl.DataFrame( {"start_date": ["2020-01-02", "2020-01-03", "2020-01-04"]}) df = df.with_columns( pl.col("start_date").str.to_date() ) # 调整alias到整个运算表达式末尾 df = df.with_columns( (pl.col("start_date") + pl.duration(days=30)).alias("date_plus_delta") ) df = df.with_columns( (pl.col("start_date") + pl.duration(days=-30)).alias("date_minus_delta") ) print(df)
修正后输出
shape: (3, 3) ┌────────────┬────────────────┬────────────────┐ │ start_date │ date_plus_delta│ date_minus_delta│ │ --- │ --- │ --- │ │ date │ date │ date │ ╞════════════╪════════════════╪════════════════╡ │ 2020-01-02 │ 2020-02-01 │ 2019-12-03 │ │ 2020-01-03 │ 2020-02-02 │ 2019-12-04 │ │ 2020-01-04 │ 2020-02-03 │ 2019-12-05 │ └────────────┴────────────────┴────────────────┘
额外优化建议
可以合并多次with_columns调用,提升代码简洁性:
df = df.with_columns( (pl.col("start_date") + pl.duration(days=30)).alias("date_plus_delta"), (pl.col("start_date") + pl.duration(days=-30)).alias("date_minus_delta") )
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

