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
]
1条答案
按热度按时间tktrz96b1#
看起来polars并没有将datetime64[D]Map到pl.Date()。也就是说,你可以做得比转换成字符串更好。
简单地做: