我有一个datetime.datetime对象(具有毫秒分辨率)和一个单独整数中的纳秒值。如何将它们组合成pandas.Timestamp而不必通过字符串表示?

最佳答案

您可以使用pd.Timedelta向日期时间添加纳秒。
举个例子:

In [57]: dt = datetime.datetime(2015,8,01,9,30,15,150000)

In [58]: print dt
2015-08-01 09:30:15.150000

In [60]: pd.Timestamp(dt)
Out[60]: Timestamp('2015-08-01 09:30:15.150000')

In [62]: pd.Timestamp(dt) + pd.Timedelta(888)
Out[62]: Timestamp('2015-08-01 09:30:15.150000888')

这也适用于一系列时间戳:
In [63]: s = pd.Series([dt, dt])

In [64]: s
Out[64]:
0   2015-08-01 09:30:15.150
1   2015-08-01 09:30:15.150
dtype: datetime64[ns]

In [65]: s + pd.Timedelta(888)
Out[65]:
0   2015-08-01 09:30:15.150000888
1   2015-08-01 09:30:15.150000888
dtype: datetime64[ns]

In [66]: s_nano = pd.Series([pd.Timedelta(888), pd.Timedelta(999)])

In [67]: s + s_nano
Out[67]:
0   2015-08-01 09:30:15.150000888
1   2015-08-01 09:30:15.150000999
dtype: datetime64[ns]

从一系列整数纳秒开始,您可以轻松地将其转换为时间增量:
In [71]: pd.to_timedelta(s_nano, unit='ns')
Out[71]:
0   00:00:00.000000
1   00:00:00.000000
dtype: timedelta64[ns]

In [72]: pd.to_timedelta(s_nano, unit='ns').values
Out[72]: array([888, 999], dtype='timedelta64[ns]')

它在repr系列中只显示0的原因在熊猫中似乎是个错误,因为这些值是正确的。

10-05 20:54
查看更多