例如,在 q 中,有一个专用的时间结构,例如 11:59:59.999,我可以在表中将其用作列。熊猫中有这样的东西吗?
我阅读了该文档,似乎有相当全面的例子来说明每日决议的时间戳,我猜这对基金经理有好处。是否有毫秒分辨率时间结构?
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
属性Series
产生dtypenumpy.ndarray
的a 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
在pandas
0.13.0 中,您将能够创建纳秒范围date_range
,这对于具有相当大的采样率的数据集非常有用,例如神经生理学中的细胞外记录:
In [15]: date_range('2013/11/1', freq='N', periods=10)
Out[15]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-11-01 00:00:00, ..., 2013-11-01 00:00:00.000000009]
Length: 10, Freq: N, Timezone: None
Pandas 支持使用 numpy datetime 64 对象,这些对象使用 64 位存储时间。从公元前 2.9e6 到公元 2.9e6,这具有足够的毫秒绝对分辨率,请参阅此处了解更多信息。您可以在 pandas 中轻松地将日期或日期字符串转换为日期时间,请参阅文档和有用的IPython 笔记本。
正如@PhillipCloud 在他的回答中评论和澄清的那样,这表示为 datetime64[ns] 所以它是纳秒,对于您需要的分辨率应该足够精细。