时间序列数据可以是特定日期、持续时间或固定定义间隔的形式。
8ab9f1c5b603210f07533a66fb6b648a.png
时间戳可以是一天的日期,也可以是给定日期的纳秒,具体取决于精度。例如,“2020–01–01 14:59:30”是基于秒的时间戳。

属性 说明
year datetime 的年
month datetime 的月
day datetime 的日
hour datetime 的小时
minute datetime 的分钟
second datetime 的秒
microsecond datetime 的微秒
nanosecond datetime 的纳秒
date 返回 datetime.date(不包含时区信息)
time 返回 datetime.time(不包含时区信息)
timetz 返回带本地时区信息的 datetime.time
dayofyear 一年里的第几天
weekofyear 一年里的第几周
week 一年里的第几周
dayofweek 一周里的第几天,Monday=0, Sunday=6
weekday 一周里的第几天,Monday=0, Sunday=6
weekday_name 这一天是星期几 (如,Friday)
quarter 日期所处的季节:Jan-Mar = 1,Apr-Jun = 2 等
days_in_month 日期所在的月有多少天
is_month_start 逻辑判断是不是月初(由频率定义)
is_month_end 逻辑判断是不是月末(由频率定义)
is_quarter_start 逻辑判断是不是季初(由频率定义)
is_quarter_end 逻辑判断是不是季末(由频率定义)
is_year_start 逻辑判断是不是年初(由频率定义)
is_year_end 逻辑判断是不是年末(由频率定义)
is_leap_year 逻辑判断是不是日期所在年是不是闰年

时间序列的结构

eccab1d8fafbcaa23b6cfecb7017ff57.png
除了这三种结构,Pandas还支持日期偏移概念,这是一种考虑日历算法的相对时间长度。

创建时间戳

最基本的时间序列数据结构是时间戳,它可以使用 **to_datetime****Timestamp** 函数创建。

  1. import pandas as pd
  2. pd.to_datetime('2020-9-13')
  3. Timestamp('2020-09-13 00:00:00')
  4. pd.Timestamp('2020-9-13')
  5. Timestamp('2020-09-13 00:00:00')

访问时间戳的信息

  1. a = pd.Timestamp('2020-9-13')
  2. a.day_name()
  3. 'Sunday'
  4. a.month_name()
  5. 'September'
  6. a.day
  7. 13
  8. a.month
  9. 9
  10. a.year
  11. 2020

获取一些其其他的信息,Timestamp对象还保存有关日期算术的信息。例如,我们可以问一年是否是闰年。

  1. b = pd.Timestamp('2020-9-30')
  2. b.is_month_end
  3. True
  4. b.is_leap_year
  5. True
  6. b.is_quarter_start
  7. False
  8. b.weekofyear
  9. 40

欧式日期

使用to_datetime函数来处理欧式日期(即日期优先,相当于正常的时间倒过来)。dayfirst参数设置为True。

  1. pd.to_datetime('10-9-2020', dayfirst=True)
  2. Timestamp('2020-09-10 00:00:00')
  3. pd.to_datetime('10-9-2020')
  4. Timestamp('2020-10-09 00:00:00')

如果第一项大于12,Pandas知道它不能是月

将数据帧转换为时间序列数据

to_datetime 函数可以将具有适当列的数据帧转换为时间序列。考虑以下数据帧
e56b63d9c4d23e9a65f6e89eb66aa46f.png

  1. pd.to_datetime(df)
  2. '''
  3. 0 2020-04-13
  4. 1 2020-05-16
  5. 2 2019-04-11
  6. dtype: datetime64[ns]
  7. '''

时间序列数据

在现实生活中,我们几乎总是处理连续的时间序列数据,而不是单独的日期。Pandas使处理时序数据变得非常简单。
我们可以将日期列表传递给to_datetime函数。返回的对象是DatetimeIndex。

  1. pd.to_datetime(['2020-09-13', '2020-08-12',
  2. '2020-08-04', '2020-09-05'])
  3. '''
  4. DatetimeIndex(['2020-09-13', '2020-08-12', '2020-08-04', '2020-09-05'], dtype='datetime64[ns]', freq=None)
  5. '''

创建包含to_datetime和to_timedelta的时间序列

可以通过向时间戳添加TimedeltaIndex来创建DatetimeIndex。

  1. pd.to_datetime('10-9-2020') + pd.to_timedelta(np.arange(5), 'D')

416e29e9928f9a57ac4667d7471e6cb5.png
“D”表示“day”,但还有许多其他选项可用。你可以在这里查看整个清单:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_timedelta.html

date_range函数

提供了一种更灵活的方式来创建DatetimeIndex,也是最常用的方法之一

  1. pd.date_range(start='2020-01-10', periods=10, freq='M')

periods参数指定索引中的项数。freq是频率,“M”表示一个月的最后一天。就freq参数的参数而言,date_range相当灵活。

  1. pd.date_range(start='2020-01-10', periods=10, freq='6D')

19e7ae00442faadf1c7ccffc7e16faae.png

period_range 函数

返回一个周期索引。语法类似于date_range函数,这里可以返回月份

  1. pd.period_range('2018', periods=10, freq='M')

b388716d46409f46a49504f67e682d26.png

timedelta_range 函数

返回timedeltaIndex

  1. pd.timedelta_range(start='0', periods=24, freq='H')

fd14fa60f6f12abba10e0174444e344c.png

偏移量

对于一个时间序列,可以制定一个偏移量,在计算均线的时候十分有用

  1. A = pd.date_range('2020-01-01', periods=10, freq='D')
  2. A

62b95e02cf66f1870b83e2b378b0dcaf.png
在序列中增加一周的偏移量

  1. A + pd.offsets.Week()

33db1cc1af9ff6acf7a229e35c40b709.png