我尝试将日期列转换为每个日期之后的下一个工作日(如果日期不是工作日,则保持不变)。为此,我使用了一个名为busday_offset的Numpy函数,它将Numpy数组作为第一个参数。下面的代码行不起作用,因为pl.col('creation_date')不是Polars列,而是某种抽象对象。因此,不能在其上调用“.to_numpy”将列转换为numpy数组。
sales_orders.with_columns(
[
pl.lit(np.busday_offset(pl.col('creation_date').to_numpy(), 0, roll='forward'))
]
)
字符串
-> AttributeError:“Expr”对象没有属性“to_numpy”
我知道一个解决方法是在“sales_orders”表上使用“.get_column”方法,如下所示:
sales_orders.with_columns(
[
pl.lit(np.busday_offset(sales_orders.get_column('creation_date').to_numpy(), 0, roll='forward'))
]
)
型
但这缺乏优雅性,并且不可能像这样嵌套“with_columns”语句:
sales_orders.with_columns(
[
pl.lit(np.busday_offset(sales_orders.get_column('creation_date'), 0, roll='forward')).alias('order_acknowledgement_date')
]
).with_columns(
[
pl.lit(np.busday_offset(sales_orders.get_column('order_acknowledgement_date'), 2, roll='forward')).alias('ship_due_date')
]
)
型
-> ColumnNotFoundError:order_acknowledgement_date这确实不起作用,因为“order_acknowledgement_date”不是“sales_orders”表的一部分。
我的问题是:如何在select/with_columns语句中将pl.col('creation_date')转换为Numpy数组,而不直接引用sales_orders表?
1条答案
按热度按时间yshpjwxd1#
***更新:**Polars现在可以理解numpy.datetime64对象,截至
v0.18.7
可以使用
.map()
个字符