Numpy datetime 64 [D]数组到极坐标日期序列/列

62lalag4  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(133)

Numpy datetime数组似乎在Polars中被转换为对象序列,但是数字或字符串数组在转换为pl.Series时保持正确的格式。我使用它是错误的还是这是一个bug等?
在:

datetime_array = np.array(['2022-02-11', '2022-02-11', '2022-02-11','2022-02-10','2022-02-11', '2022-02-11'], dtype='datetime64[D]')

输出:

array(['2022-02-11', '2022-02-11', '2022-02-11', '2022-02-10',
       '2022-02-11', '2022-02-11'], dtype='datetime64[D]')

转换为系列:
在:

pl.Series(datetime_array)

输出:

shape: (6,)
Series: '' [o][object]
[
    2022-02-11
    2022-02-11
    2022-02-11
    2022-02-10
    2022-02-11
    2022-02-11
]

如果我试图将序列中的dtype定义为pl.Date或pl.Utf8,则会引发如下异常
在:

pl.Series(datetime_array, dtype=pl.Date)

输出:

InvalidOperationError: cannot cast array of type ObjectChunked to arrow datatype

解决这个问题的方法是在numpy中将numpy日期时间数组转换为字符串类型,然后再转换为Polars序列。然后在Polars中使用.str.strptime()将其转换回日期类型。
在:

pl.Series(np.datetime_as_string(datetime_array)).str.strptime(pl.Date, fmt="%Y-%m-%d")

输出:

shape: (6,)
Series: '' [date]
[
    2022-02-11
    2022-02-11
    2022-02-11
    2022-02-10
    2022-02-11
    2022-02-11
]
tktrz96b

tktrz96b1#

看起来polars并没有将datetime64[D]Map到pl.Date()。也就是说,你可以做得比转换成字符串更好。
简单地做:

pl.Series(datetime_array.astype('datetime64[ms]')).cast(pl.Date())

相关问题