在python pandas中是否有专用的毫秒精度时间戳数据结构?

时间:2013-10-06 20:41:54

标签: python pandas

例如,在q中,有一个专用的时间结构,例如11:59:59.999,我可以在表中作为列使用它。大熊猫有这样的东西吗?

我阅读了文档,似乎有一个相当全面的日常解决方案时间戳示例,这对基金经理来说是个好消息。是否有毫秒秒的分辨率时间结构?

2 个答案:

答案 0 :(得分:3)

是的!

它被称为Timestamp

pandas使用自己的Timestamp类支持最高纳秒分辨率,该类是datetime.datetime的子类:

In [6]: pd.Timestamp('now') + np.timedelta64(100, 'ns')
Out[6]: Timestamp('2013-10-06 21:09:19.000000100', tz=None)

In [7]: isinstance(_6, datetime.datetime)
Out[7]: True

请注意,所有类似日期的Series对象都表示为datetime64[ns]

In [8]: Series(date_range('now', periods=5))
Out[8]:
0   2013-10-06 21:11:37
1   2013-10-07 21:11:37
2   2013-10-08 21:11:37
3   2013-10-09 21:11:37
4   2013-10-10 21:11:37
dtype: datetime64[ns]

即使我只在结构中指定'D'(天)频率,也是如此:

In [11]: Series(date_range('1/1/2001', periods=5, freq='D'))
Out[11]:
0   2001-01-01 00:00:00
1   2001-01-02 00:00:00
2   2001-01-03 00:00:00
3   2001-01-04 00:00:00
4   2001-01-05 00:00:00
dtype: datetime64[ns]

values的{​​{1}}属性产生Series numpy.ndarray个dtype:

datetime64[ns]

您还可以创建具有毫秒频率的日期范围(请注意此处的In [12]: s = Series(date_range('1/1/2001', periods=5, freq='D')) In [13]: s.values Out[13]: array(['2000-12-31T19:00:00.000000000-0500', '2001-01-01T19:00:00.000000000-0500', '2001-01-02T19:00:00.000000000-0500', '2001-01-03T19:00:00.000000000-0500', '2001-01-04T19:00:00.000000000-0500'], dtype='datetime64[ns]') ;这只是我们提供的名称,自'L'用于'MS'偏移后的毫秒数):

MonthBegin

In [18]: date_range('2013/11/1', freq='ms', periods=10) Out[18]: <class 'pandas.tseries.index.DatetimeIndex'> [2013-11-01 00:00:00, ..., 2013-11-01 00:00:00.009000] Length: 10, Freq: L, Timezone: None 0.13.0中,您将能够使用pandas创建纳秒范围,这对于具有相当大采样率的数据集非常有用,例如神经生理学中的细胞外记录:

date_range

答案 1 :(得分:2)

Pandas支持使用numpy datetime 64对象,这些对象使用64位来存储时间。这具有从公元前2.9e6到公元2.9e6的毫秒的绝对分辨率,有关详细信息,请参阅here。您可以在熊猫中轻松地将日期或日期字符串转换为日期时间,请参阅docs和有用的IPython notebook

正如@PhillipCloud在他的回答中评论和阐明的那样,它表示为datetime64 [ns],所以它是纳秒级,应该足够精确到你需要的分辨率。