我有一个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的原因在熊猫中似乎是个错误,因为这些值是正确的。