我试图在两个时间间隔之间有一个秒的向量:
import numpy as np
import pandas as pd
date="2011-01-10"
start=np.datetime64(date+'T09:30:00')
end=np.datetime64(date+'T16:00:00')
range = pd.date_range(start, end, freq='S')
由于某些原因,当我print range
时,我得到了:
[2011-01-10 17:30:00, ..., 2011-01-11 00:00:00]
所以长度是23401这是我想要的但绝对不是正确的时间间隔。那是为什么?
另外,如果我有一个DataFrame df
,其中包含datetime64格式的列,如下所示:
Time
15:59:57.887529007
15:59:57.805383290
一旦我解决了上述问题,我是否能够执行以下操作:
data = df.reindex(df.Time + range)
data = data.ffill()
??
我需要执行EDIT下提出的确切步骤:OP问题的解决方案here除datetime64
格式外。可能的?
答案 0 :(得分:3)
似乎pandas date_range
正在删除时区(看起来像一个bug,我认为它已经提交了......),你可以使用Timestamp而不是datetime64来解决这个问题:
In [11]: start = pd.Timestamp(date+'T09:30:00')
In [12]: end = pd.Timestamp(date+'T16:00:00')
In [13]: pd.date_range(start, end, freq='S')
Out[13]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-01-10 09:30:00, ..., 2011-01-10 16:00:00]
Length: 23401, Freq: S, Timezone: None
注意:要查看它是时区,您将使用UTC-8和14:00 + 8:00 == 00:00(第二天)。
答案 1 :(得分:2)
是否因为当您将日期时间指定为字符串时,numpy假定它处于localtime并将其转换为UTC。
虽然时间间隔是UTC
,但指定时间偏移量会给出正确的时间间隔start=np.datetime64(date+'T09:30:00+0000')
end=np.datetime64(date+'T16:00:00+0000')
range=pd.date_range(start,end,freq='S')
或者使用datetime.datetime对象作为开始和结束,并且此处的间隔再次为UTC
import datetime
start = datetime.datetime(2011, 1, 10, 9, 30, 0)
end = datetime.datetime(2011, 1, 10, 16, 0, 0)
range=pd.date_range(start,end,freq='S')