2013-04-29 72 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