And*_*son 5 python numpy pandas
>>> 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
Run Code Online (Sandbox Code Playgroud)
看起来它将底层的值解释int64
为ns而不是ms.这是熊猫处理timedelta64[ms]
类型的错误吗?
timedelta 处理仍在进行中,请参阅此问题:https://github.com/pydata/pandas/issues/3009
主要问题是时间增量在 numpy 1.6.2 中被破坏。
尚不支持在创建过程中传递任意 timedeltas 数据类型,作为一种解决方法,您可以执行此操作,因为目前唯一支持的数据类型是内部 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
Run Code Online (Sandbox Code Playgroud)
您想要实现的最终目标是什么?