2013-04-29 108 views
4
>>> import pandas as pd 
>>> pd.__version__ 
'0.11.0' 
>>> import numpy as np 
>>> np.__version__ 
'1.7.1' 
>>> d={'a':np.array([68614867, 72200835], dtype=np.dtype('timedelta64[ms]'))} 
>>> d['a'][0] 
numpy.timedelta64(68614867,'ms') 
>>> df = pd.DataFrame.from_dict(d) 
>>> print df 
      a 
0 00:00:00.068615 
1 00:00:00.072201 

它看起來像它將底層int64中的值解釋爲ns不是ms。這是熊貓處理timedelta64[ms]類型的錯誤嗎?熊貓處理numpy timedelta64 [ms]

回答

1

timedelta處理工作還在進行中,看到這個問題:https://github.com/pydata/pandas/issues/3009

主要問題是,timedeltas在numpy的1.6.2打破。

通過任意timedeltas創作dtypes尚不支持,如 一種解決方法,你可以這樣做的,因爲目前唯一支持的D型是 內部timedelta64 [NS](這正是如何datetime64 [NS ])順便說一句。熊貓 轉換爲內部repr,然後你確實想要你想要的。

(該解決方案僅適用於numpy> = 1.7)。

In [22]: d['a'].astype('timedelta64[ns]') 
Out[22]: array([68614867000000, 72200835000000], dtype='timedelta64[ns]') 

In [23]: DataFrame(dict(a = d['a'].astype('timedelta64[ns]'))) 
Out[23]: 
       a 
0 19:03:34.867000 
1 20:03:20.835000 

In [24]: DataFrame(dict(a = d['a'].astype('timedelta64[ns]'))).dtypes 
Out[24]: 
a timedelta64[ns] 
dtype: object 

你試圖完成的最終目標是什麼?

+0

我正在使用熊貓來處理數據作爲計算中的一個階段。理想情況下,我希望能夠以與輸入相同的格式(即類型和值)來檢索數據。同時處理datetime64和timedelta64也不一致。在前熊貓似乎保持類型信息(即保持timedelta64 [毫秒],但漂亮的打印不正確),而對於datetime64 [D]或datetime64 [M]熊貓轉換爲日期時間[ns]。 – 2013-04-30 06:43:30

+0

我建議你看看:http://pandas.pydata.org/pandas-docs/dev/timeseries.html,http://pandas.pydata.org/pandas-docs/dev/timeseries.html#time -deltas,datetime64 [ns]和timedelta64 [ns]存儲格式提供了很大的靈活性,並且熊貓在內部支持它們。轉換爲任何其他格式非常簡單。 – Jeff 2013-04-30 11:40:55