【问题标题】:Python: datetime64 issues with rangePython:datetime64 范围问题
【发布时间】:2014-04-09 23:30:15
【问题描述】:

我试图在两个时间间隔之间有一个秒向量:

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: SOLUTION of the OP question ask here 下提出的确切步骤,datetime64 格式除外。可能吗?

【问题讨论】:

  • 当我使用 pandas 0.13.1 打印范围(我看到一个 DatetimeIndex)时,我得到了一些不同的东西。啊,我知道这是一个时区的事情。你在 UTC-8,14:00 + 8:00 == 00:00。

标签: python numpy pandas


【解决方案1】:

是不是因为当你将日期时间指定为字符串时,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')

【讨论】:

  • @tanayamishah 谢谢!你的答案和下面的一样好...我不能同时检查两个答案!
【解决方案2】:

看来 pandas date_range 正在删除时区(看起来像一个错误,我认为它已经提交了......),您可以使用 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(第二天)。

【讨论】:

  • 谢谢!但如果我使用pd.Timestamp,我不能这样做:data = df.reindex(df.Time + range) after...对吗?它没有用。所以我必须坚持datetime64 不?
  • @CharlesM 您不能添加“时间”列和日期时间列/索引,您需要将其设为时间增量或偏移列...?
  • 所以我应该将df.Time 设为datetime64 以外的名称?如果不能?我必须使用datetime64,因为我的数据以纳秒为单位
  • @CharlesM start 和 end 仅用于构造作为 DatetimeIndex 的 date_range,如果您将其设置为列,您将看到 datetime64。
  • 完美,我明白了!谢谢
猜你喜欢
  • 2014-12-28
  • 1970-01-01
  • 2020-03-04
  • 2010-11-09
  • 2011-01-08
  • 2011-04-09
  • 2017-01-05
  • 2016-08-04
相关资源
最近更新 更多