我正在try 将日期列转换 for each 日期之后的下一个工作日(如果该日期还不是一个工作日,在这种情况下它保持不变).为此,我使用了一个名为Busday_Offset的Numpy函数,该函数将一个Numpy数组作为其第一个参数.下面这行代码不起作用,因为pl.ol(‘Creation_Date’)不是Polars列,而是某种抽象对象.因此,不能对其调用".to_numpy"将该列转换为NumPyarray.

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_ACKNOWLEDMENT_DATE 这确实不起作用,因为"ORDER_ACKNOWLEDMENT_DATE"不是"SALES_ORDERS"表的一部分.

So my question is: how can I transform pl.col('creation_date') into a Numpy array within a select/with_columns statement without refering to the table sales_orders directly?

推荐答案

你可以用.map()

df = pl.DataFrame({"date": ["2011-03-20", "2011-03-22", "2011-03-24"]})
df = df.with_columns(pl.col("date").str.to_date())

df.with_columns(busday = 
   pl.col("date").map(lambda date: 
      pl.Series(
         np.busday_offset(date, 0, roll="forward")
           .astype("datetime64[ms]")
      )
      .cast(pl.Date)
   )
)
shape: (3, 2)
┌────────────┬────────────┐
│ date       ┆ busday     │
│ ---        ┆ ---        │
│ date       ┆ date       │
╞════════════╪════════════╡
│ 2011-03-20 ┆ 2011-03-21 │
│ 2011-03-22 ┆ 2011-03-22 │
│ 2011-03-24 ┆ 2011-03-24 │
└────────────┴────────────┘

极星目前还不能理解numpy.datetime个物体,因此是.astype().cast().

df.with_columns(busday = 
   pl.col("date").map(lambda date: 
      pl.Series(np.busday_offset(date, 0, roll='forward'))
   )
)

# shape: (3, 2)
# ┌────────────┬────────────┐
# │ date       ┆ busday     │
# │ ---        ┆ ---        │
# │ date       ┆ object     │ # <- dtype object
# ╞════════════╪════════════╡
# │ 2011-03-20 ┆ 2011-03-21 │
# │ 2011-03-22 ┆ 2011-03-22 │
# │ 2011-03-24 ┆ 2011-03-24 │
# └────────────┴────────────┘

有一个挂起的拉取请求要解决此问题:https://github.com/pola-rs/polars/issues/9779#issuecomment-1627084008

Python相关问答推荐

双情节在单个图上切换-pPython

如何编写一个正规表达式来查找序列中具有2个或更多相同辅音的所有单词

pyramid 内部数组中的连续序列-两极

如果AST请求默认受csref保护,那么在Django中使用@ system_decorator(csref_protect)的目的是什么?

当值是一个integer时,在Python中使用JMESPath来验证字典中的值(例如:1)

从管道将Python应用程序部署到Azure Web应用程序,不包括需求包

如何防止Plotly在输出到PDF时减少行中的点数?

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

使用polars .滤镜进行切片速度比pandas .loc慢

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

对于一个给定的数字,找出一个整数的最小和最大可能的和

有症状地 destruct 了Python中的regex?

Pandas 都是(),但有一个门槛

如何记录脚本输出

Polars:用氨纶的其他部分替换氨纶的部分

我如何根据前一个连续数字改变一串数字?

driver. find_element无法通过class_name找到元素'""

如何使用两个关键函数来排序一个多索引框架?

人口全部乱序 - Python—Matplotlib—映射