如何将浮点转换为拼花时间戳逻辑类型?

2024-05-20 12:11:33 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个pyarrow表,其中一列Timestamp包含float64。 这些浮动实际上是用s表示的时间戳。 例如:

import pyarrow as pa
my_table = pa.table({'timestamp': pa.array([1600419000.477,1600419001.027])})

我从documentation读到了关于拼花逻辑类型的内容。 请问,如何将这些浮点值转换为逻辑类型TIMESTAMP? 我看不到关于这种方法的文档

谢谢你的帮助。 祝您今天过得愉快, 最好的


Tags: import类型mydocumentationas时间table逻辑
2条回答

您需要在pyarrow中将浮点转换为实际的时间戳类型,然后它将自动写入paruet逻辑时间戳类型

使用pyarrow.compute模块,该转换也可以在pyarrow中完成(与在pandas中进行转换相比,不那么符合人体工程学,但避免转换为pandas和pandas):

>>> import pyarrow.compute as pc
>>> arr = pa.array([1600419000.477,1600419001.027])
>>> pc.multiply(arr, pa.scalar(1000.)).cast("int64").cast(pa.timestamp('ms'))
<pyarrow.lib.TimestampArray object at 0x7fe5ec3df588>
[
  2020-09-18 08:50:00.477,
  2020-09-18 08:50:01.027
]

我认为您无法在arrow内将浮动转换为时间戳

箭头假定时间戳是给定精度(ms、us、ns)的64位整数。在您的情况下,您必须将秒浮点数乘以您想要的精度(1000毫秒),然后转换为int64并转换为时间戳

下面是一个使用熊猫的示例:

(
    pa.array([1600419000.477,1600419001.027])
    .to_pandas()
    .mul(1000)
    .astype('long')
    .pipe(pa.Array.from_pandas)
    .cast(pa.timestamp('ms'))
)

这给了你:

<pyarrow.lib.TimestampArray object at 0x7fb5025b6a08>
[
  2020-09-18 08:50:00.477,
  2020-09-18 08:50:01.027
]

相关问题 更多 >