如何从 datetime.datetime 对象和纳秒值创建 pandas.Timestamp

How to create a pandas.Timestamp from datetime.datetime object and nanoseconds value

我有一个 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]

从一系列整数纳秒开始,你可以很容易地将它转换为timedelta:

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 中只显示零的原因似乎是 pandas 中的错误,因为值是正确的。