我有一个使用strptime()生成的datetime对象.
>>> tm
datetime.datetime(2010, 6, 10, 3, 56, 23)
Run Code Online (Sandbox Code Playgroud)
我需要做的是将分钟缩短到最接近的第10分钟.到目前为止我一直在做的是获取分钟值并使用round().
min = round(tm.minute, -1)
Run Code Online (Sandbox Code Playgroud)
但是,与上面的示例一样,当分钟值大于56时,它会给出无效时间.即:3:60
有什么更好的方法呢?datetime支持这个吗?
我有一个df通常的时间戳作为索引:
2011-04-01 09:30:00
2011-04-01 09:30:10
...
2011-04-01 09:36:20
...
2011-04-01 09:37:30
Run Code Online (Sandbox Code Playgroud)
如何使用相同的时间戳创建此数据框的列,但舍入到最接近的第5分钟间隔?像这样:
index new_col
2011-04-01 09:30:00 2011-04-01 09:35:00
2011-04-01 09:30:10 2011-04-01 09:35:00
2011-04-01 09:36:20 2011-04-01 09:40:00
2011-04-01 09:37:30 2011-04-01 09:40:00
Run Code Online (Sandbox Code Playgroud) 我已经看到许多关于如何定义自己的函数的问题,这些函数执行与此类似的操作,但我不知道如何使用 timedelta 的内置函数。有没有人有使用 timedelta.round() 的例子?我有想要舍入到最近的全天的 timedelta 对象。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Timedelta.round.html上的文档是:
时间增量.round
将 Timedelta 舍入到指定的分辨率
参数:
freq : 表示舍入分辨率的频率字符串
返回:四舍五入到给定分辨率的新 Timedelta
freq如果频率无法转换,则引发:ValueError
假设我有日期时间对象.我希望它们四舍五入到最接近的前一个小时:
2014-07-18T14:23:12 --> 2014-07-18T14:15:00
2014-07-18T14:14:59 --> 2014-07-18T14:00:00
2014-07-18T00:00:00 --> 2014-07-18T00:00:00
Run Code Online (Sandbox Code Playgroud)
等等.
我有一些时间序列数据作为Pandas数据帧,从一小时后15分钟和过去45分钟(30分钟的时间间隔)开始观察,然后将频率改变为每分钟.我想对数据进行重新采样,使其在整个数据帧的每小时30分钟,15小时和45小时的常规频率.
我想到了实现这个目标的两种方法.
1.使用时间序列数据作为数据帧中的列,只需在15分钟和45分钟时过滤所有观测值的数据帧.
2.重新设置索引,使时间序列数据是多索引的一部分(索引的第0级是气象站,第1级是观察的时间)并使用熊猫日期时间序列功能如resample().
原始数据帧,天气,如下所示:
parsed_time Pressure Temp Hum
Station (index)
Bow 1 2018-04-15 14:15:00 1012 20.0 87
2 2018-04-15 14:45:00 1013 20.0 87
3 2018-04-15 15:15:00 1012 21.0 87
4 2018-04-15 15:45:00 1014 22.0 86
5 2018-04-15 16:00:00 1015 22.0 86
6 2018-04-15 16:01:00 1012 25.0 86
7 2018-04-15 16:02:00 1012 25.0 86
Stratford 8 2018-04-15 14:15:00 1011 18.0 87
9 2018-04-15 14:45:00 1011 18.0 87
10 2018-04-15 15:15:00 1012 18.0 87
11 2018-04-15 15:45:00 1014 19.0 …Run Code Online (Sandbox Code Playgroud)