2014-03-07 35 views
3

datetime64問題,我想有兩個時間間隔之間的秒向量:的Python:使用範圍

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這是我想要的,但絕對不是正確的時間間隔。這是爲什麼?

另外,如果我有一個數據幀df與datetime64格式,看起來像一列:

Time 
15:59:57.887529007 
15:59:57.805383290 

一旦我解決了上述問題,我將能夠做到以下幾點:

data = df.reindex(df.Time + range) data = data.ffill() ??

我需要做的編輯提出的確切步驟:OP問題的解決方案問here除了datetime64格式。可能?

+0

當我使用熊貓0.13.1打印範圍(我看到一個DatetimeIndex)時,我得到了一些不同的東西。啊,我看到這是一個時區的事情。你在UTC-8和14:00 + 8:00 == 00:00。 –

回答

3

看來,大熊貓date_range被丟棄時區(看起來像一個錯誤,我認爲它已經提起......),你可以使用時間戳,而不是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(第二天)。

+0

謝謝!但如果我使用'pd.Timestamp',我不能這樣做:'data = df.reindex(df.Time + range)'after ... right?它沒有工作。所以我必須堅持'datetime64'不行? – Plug4

+0

@CharlesM這應該工作... –

+0

@CharlesM你不能添加一個「時間」列和一個日期時間列/索引,你需要使它成爲一個timedelta或偏移列... ...? –

2

是因爲當你指定日期時間爲字符串,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') 
+0

@tanayamishah謝謝!你的答案和下面的一樣好......我無法檢查兩個答案! – Plug4