首页 > 解决方案 > 通过查找列表中连续对象的时间增量来修改 numpy datetime64 对象列表的最佳方法是什么?

问题描述

我有一个 numpy datetime64 对象列表,如下所示:

time_list_array = [numpy.datetime64('2021-01-01T07:23:00.000000000'),
                   numpy.datetime64('2021-01-01T07:25:00.000000000'), 
                   numpy.datetime64('2021-01-01T07:26:00.000000000'), 
                   numpy.datetime64('2021-01-01T07:27:00.000000000'),
                   numpy.datetime64('2021-01-14T16:27:00.000000000')]

我想遍历这个列表并以特定的方式对其进行修改。

本质上,只要列表中两个相邻的 datetime64 对象之间的差异超过一分钟,复制该 datetime64 对象并将其放在列表中的原始对象之后。

只要列表中两个相邻的 datetime64 对象之间的差异等于一分钟,就转到列表中的下一个 datetime64 对象,直到您遇到超过一分钟的差异。然后,取该范围内的第一个 datetime64 对象和最后一个 datetime64 对象,并将它们彼此相邻放置。

所以,我最后的 time_list_array 看起来像这样:

time_list_array = [numpy.datetime64('2021-01-01T07:23:00.000000000'),
                   numpy.datetime64('2021-01-01T07:23:00.000000000'),
                   numpy.datetime64('2021-01-01T07:25:00.000000000'),  
                   numpy.datetime64('2021-01-01T07:27:00.000000000'),
                   numpy.datetime64('2021-01-14T16:27:00.000000000'),
                   numpy.datetime64('2021-01-14T16:27:00.000000000')]

请注意 1/1/21 7:23:00 datetime64 对象是如何被复制并直接添加到原始对象之后的。然后,将原始数组中从 1/1/21 7:25:00 到 1/1/21 7:27:00 的范围缩短为仅开始时间和结束时间。最后,1/14/21 16:27:00 再次被复制,直接添加到原文后面。

这需要以这种方式格式化以导出为 txt 文件,并因此在仅接受非常特定格式的 txt 文件的在线软件程序中使用。

我试图像这样找到 time_list_array 的时间增量:

time_list_array_delta = np.diff(time_list_array)

然后在几分钟内找到差异:

minutes = time_list_array_delta.total_seconds()/60

但是一直报错:

AttributeError: 'numpy.ndarray' object has no attribute 'total_seconds'

但是,我的方法可能完全偏离了基础。任何帮助将非常感激!

标签: python-3.xnumpydatetimedate-difference

解决方案


datetime64 存储为纳秒,没有total_seconds(),它只是一个整数值。只需将其除以 1e9 即可得到秒数:

minutes = time_list_array_delta / 60e9

此外,您的第一个列表可能已经是一个 numpy 数组:

time_list_array = np.array(['2021-01-01T07:23:00.000000000', '2021-01-01T07:25:00.000000000',
  '2021-01-01T07:26:00.000000000', '2021-01-01T07:27:00.000000000'], dtype='datetime64[ns]')

你想用这些规则做什么?您的重复不一致:在第一次操作中,您复制了 >1min 跳跃中的第一个值,但在最后一次操作中,您复制了最后一个值。


推荐阅读