5
>>> 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]类型的错误吗?

4

1 回答 1

2

timedelta 处理仍在进行中,请参阅此问题:https ://github.com/pydata/pandas/issues/3009

主要问题是时间增量在 numpy 1.6.2 中被破坏。

尚不支持在创建中传递任意 timedeltas dtypes,作为一种解决方法,您可以这样做,因为目前支持的唯一 dtype 是内部 timedelta64[ns](这正是 datetime64[ns])的工作方式。Pandas 转换为内部 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

你要达到的最终目标是什么?

于 2013-04-29T23:47:04.727 回答