2013-03-08 40 views
1

解析當數據文件,我有秒這樣的:減少時間序列毫秒的時間精度

1.296999421 

目前正在顯示在熊貓這樣的:

<Timestamp: 2011-04-16 00:00:01.296999> 

以'一個D型datetime64 [ns]' 但我知道原來的測量只有毫秒的精度。

是否有可能生成只使用毫秒精度的熊貓時間序列? 我的目標之一是根據毫秒計數器精確加入不同的時間序列。

所以我想有隻

<Timestamp: 2011-04-16 00:00:01.297> 

,這樣我可以在其他時間序列精確地匹配這個時間戳。

換句話說,是否有'datetime [ms]'以及如何將非連續時間戳轉換爲它?

回答

2

HYRY的解決方案是正確的,但大熊貓將不知道該如何處理它

使用最新的熊貓0.11-dev的有,timedeltas現在有充分的支持

http://pandas.pydata.org/pandas-docs/dev/timeseries.html#time-deltas

In [25]: a = np.random.rand(8)*10 

In [26]: a.sort() 

In [27]: a 
Out[27]: 
array([ 0.72062151, 1.02039858, 2.07877837, 3.94256869, 5.5139672 , 
    6.80194715, 6.83050498, 8.63027672]) 

# trick is to pass a nanosecond value directly 
# pandas keeps all values internally as timedelta64[ns] 
In [5]: pd.Series((np.round(a*1000)/1000)*1e9,dtype='timedelta64[ns]') 
Out[5]: 
0 00:00:00.721000 
1 00:00:01.020000 
2 00:00:02.079000 
3 00:00:03.943000 
4 00:00:05.514000 
5 00:00:06.802000 
6 00:00:06.831000 
7 00:00:08.630000 
dtype: timedelta64[ns] 

如果你需要這個作爲時間戳

In [8]: pd.Series((np.round(a*1000)/1000)*1e9,dtype='timedelta64[ns]') + pd.Timestamp('20110406') 
Out[8]: 
0 2011-04-06 00:00:00.721000 
1 2011-04-06 00:00:01.020000 
2 2011-04-06 00:00:02.079000 
3 2011-04-06 00:00:03.943000 
4 2011-04-06 00:00:05.514000 
5 2011-04-06 00:00:06.802000 
6 2011-04-06 00:00:06.831000 
7 2011-04-06 00:00:08.630000 
dtype: datetime64[ns] 
+0

所以我在想,我最好讓傑夫獨自陪伴我所有的時間問題..你不能說我沒有嘗試! ;) – 2013-03-08 19:49:01

+0

我現在有'pd.io.date_converters.parse_all_fields()'不喜歡timedeltas作爲輸入的問題嗎?你有這個想法嗎? – 2013-03-08 19:50:43

+0

因此,如果內部它仍然保持爲64位浮點數,我是否可以確定能夠測試這些時間戳之間的相等性?更好的方法是去使用np.allclose()或至少一個考慮epsilon錯誤而不是相等的測試?我希望能達到幾毫秒的可測性。 – 2013-03-08 19:59:46

1

我不知道如何將1.296999421轉換爲<Timestamp: 2011-04-16 00:00:01.296999>。我想你可以創建以下步驟datetime64 [毫秒]數組:

a = np.random.rand(100)*10 
a.sort() 
t = np.array(np.round(a*1000), dtype="timedelta64[ms]") + np.datetime64("2012-03-01") 

然後你可以使用t爲您的數據框的索引。熊貓會將其轉換爲timedelta64[ns]

+0

顯然不能轉換1.296 99xxxx到全日制郵票,這僅僅是一個例子,因爲我關心的是秒殺。 – 2013-03-09 23:54:01