python-3.x - 通过查找列表中连续对象的时间增量来修改 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'
但是,我的方法可能完全偏离了基础。任何帮助将非常感激!
解决方案
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 跳跃中的第一个值,但在最后一次操作中,您复制了最后一个值。
推荐阅读
- ios - 我正在尝试使用 didFinishLoadingWithOptions 方法从 AppDelegate 获取 rootViewController,但我无法访问该窗口
- javascript - IntelliJ 中的 Karma:测试框架意外退出
- python - Django 2.2 img 没有加载
- java - 我怎样才能使这个在java中的bubblesort工作
- node.js - Node JS在winows中提取zip文件不起作用
- python - 如何用熊猫数据框中的前一个单元格值替换行值?
- node.js - 在multer上传文件之前获取文件以外的其他字段的req.body
- spring - 如何在许多休息控制器中测试相同的授权逻辑
- r - 如何将数字更改为R中列中的文本?
- android - 如何在 Delphi Berlin 10.2 的 Android (API 26) 中保存和显示 pdf 文件