numpy Python:datetime64范围问题

kiz8lqtg  于 2023-01-26  发布在  Python
关注(0)|答案(2)|浏览(174)

我试图在两个时间间隔之间得到一个以秒为单位的向量:

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()??
除了datetime64之外,我需要执行here建议的确切步骤。这可能吗?

weylhg0b

weylhg0b1#

看起来panda date_range正在删除时区(看起来像是一个bug,我想它已经被归档了...),你可以使用Timestamp而不是datetime 64来解决这个问题:

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(第二天)。

kwvwclae

kwvwclae2#

是因为当你把datetime指定为字符串时,numpy就假设它是本地时间,并把它转换成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')

相关问题