Pandas处理时间序列(二)

3.12.3 Pandas时间序列数据结构

Pandas用来处理时间序列的基础数据类型:

  • 针对时间戳数据,Pandas 提供了Timestamp 类型。与前面介绍的一样,它本质上是 Python 的原生datetime类型的替代品,但是在性能更好的numpy.datetime64 类型的基础上创建。对应的索引数据结构是DatetimeIndex
  • 针对时间周期数据,Pandas 提供了Period 类型。这是利用numpy.datetime64 类型将固定频率的时间间隔进行编码。对应的索引数据结构是PeriodIndex
  • 针对时间增量或持续时间,Pandas 提供了Timedelta 类型。Timedelta 是一种代替Python原生datetime.timedelta 类型的高性能数据结构,同样是基于numpy.timedelta64 类型。对应的索引数据结构是TimedeltaIndex

1.pd.to_datetime()

  最基础的日期/ 时间对象是Timestamp 和DatetimeIndex。这两种对象可以直接使用,最常用的方法是pd.to_datetime() 函数,它可以解析许多日期与时间格式。对pd.to_datetime() 传递一个日期会返回一个Timestamp 类型,传递一个时间序列会返回一个DatetimeIndex 类型

In [1]: import pandas as pd
		from datetime import datetime
In [2]: dates = pd.to_datetime([datetime(2015, 7, 3), '4th of July, 2015','2015-Jul-6', '07-07-2015','20150708'])
		dates
Out[2]: DatetimeIndex(['2015-07-03', '2015-07-04', '2015-07-06', '2015-07-07',
               '2015-07-08'],
              dtype='datetime64[ns]', freq=None)

2.pd.to_period()

任何DatetimeIndex 类型都可以通过to_period() 方法和一个频率代码转换成PeriodIndex
类型。下面用’D’ 将数据转换成单日的时间序列:

In [3]: dates.to_period('D')
Out[3]: PeriodIndex(['2015-07-03', '2015-07-04', '2015-07-06', '2015-07-07',
             '2015-07-08'],
            dtype='period[D]', freq='D')	# 注意:索引数据类型不同

3.TimedeltaIndex

当用一个日期减去另一个日期时,返回的结果是TimedeltaIndex 类型:

In [4]: dates - dates[0]
Out[4]: TimedeltaIndex(['0 days', '1 days', '3 days', '4 days', '5 days'], dtype='timedelta64[ns]', freq=None)

4.pd.date_range()

为了能更简便地创建有规律的时间序列,Pandas 提供了一些方法:

  • pd.date_range() 可以处理时间戳、
  • pd.period_range() 可以处理周期
  • pd.timedelta_range() 可以处理时间间隔
    可以通过开始日期、结束日期和频率代码创建一个有规律的日期序列,默认频率是天:
In [5]: pd.date_range('2019-07-03', '2019-07-10')
Out[5]: DatetimeIndex(['2019-07-03', '2019-07-04', '2019-07-05', '2019-07-06',
               '2019-07-07', '2019-07-08', '2019-07-09', '2019-07-10'],
              dtype='datetime64[ns]', freq='D')

此外,日期范围不一定非是开始时间与结束时间,也可以是开始时间与周期数periods:

In [6]: pd.date_range('2019-07-03', periods=8)
Out[6]: DatetimeIndex(['2019-07-03', '2019-07-04', '2019-07-05', '2019-07-06',
               '2019-07-07', '2019-07-08', '2019-07-09', '2019-07-10'],
              dtype='datetime64[ns]', freq='D')

如果要创建一个有规律的周期或时间间隔序列,有类似的函数pd.period_range() 和
pd.timedelta_range()。下面是一个以月为周期的示例:

In [7]: pd.period_range('2019-07', periods=8, freq='M')
Out[7]: PeriodIndex(['2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2019-12',
             '2020-01', '2020-02'],
            dtype='period[M]', freq='M')

以及一个以小时递增的序列:

In [8]: pd.timedelta_range(0, periods=10, freq='H')
Out[8]: TimedeltaIndex(['00:00:00', '01:00:00', '02:00:00', '03:00:00', '04:00:00',
                '05:00:00', '06:00:00', '07:00:00', '08:00:00', '09:00:00'],
               dtype='timedelta64[ns]', freq='H')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值