时间序列数据可以是特定日期、持续时间或固定定义间隔的形式。
时间戳可以是一天的日期,也可以是给定日期的纳秒,具体取决于精度。例如,“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 | 逻辑判断是不是日期所在年是不是闰年 |
时间序列的结构
除了这三种结构,Pandas还支持日期偏移概念,这是一种考虑日历算法的相对时间长度。
创建时间戳
最基本的时间序列数据结构是时间戳,它可以使用 **to_datetime**
或 **Timestamp**
函数创建。
import pandas as pd
pd.to_datetime('2020-9-13')
Timestamp('2020-09-13 00:00:00')
pd.Timestamp('2020-9-13')
Timestamp('2020-09-13 00:00:00')
访问时间戳的信息
a = pd.Timestamp('2020-9-13')
a.day_name()
'Sunday'
a.month_name()
'September'
a.day
13
a.month
9
a.year
2020
获取一些其其他的信息,Timestamp对象还保存有关日期算术的信息。例如,我们可以问一年是否是闰年。
b = pd.Timestamp('2020-9-30')
b.is_month_end
True
b.is_leap_year
True
b.is_quarter_start
False
b.weekofyear
40
欧式日期
使用to_datetime函数来处理欧式日期(即日期优先,相当于正常的时间倒过来)。dayfirst参数设置为True。
pd.to_datetime('10-9-2020', dayfirst=True)
Timestamp('2020-09-10 00:00:00')
pd.to_datetime('10-9-2020')
Timestamp('2020-10-09 00:00:00')
如果第一项大于12,Pandas知道它不能是月
将数据帧转换为时间序列数据
to_datetime 函数可以将具有适当列的数据帧转换为时间序列。考虑以下数据帧
pd.to_datetime(df)
'''
0 2020-04-13
1 2020-05-16
2 2019-04-11
dtype: datetime64[ns]
'''
时间序列数据
在现实生活中,我们几乎总是处理连续的时间序列数据,而不是单独的日期。Pandas使处理时序数据变得非常简单。
我们可以将日期列表传递给to_datetime函数。返回的对象是DatetimeIndex。
pd.to_datetime(['2020-09-13', '2020-08-12',
'2020-08-04', '2020-09-05'])
'''
DatetimeIndex(['2020-09-13', '2020-08-12', '2020-08-04', '2020-09-05'], dtype='datetime64[ns]', freq=None)
'''
创建包含to_datetime和to_timedelta的时间序列
可以通过向时间戳添加TimedeltaIndex来创建DatetimeIndex。
pd.to_datetime('10-9-2020') + pd.to_timedelta(np.arange(5), 'D')
“D”表示“day”,但还有许多其他选项可用。你可以在这里查看整个清单:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_timedelta.html
date_range函数
提供了一种更灵活的方式来创建DatetimeIndex
,也是最常用的方法之一
pd.date_range(start='2020-01-10', periods=10, freq='M')
periods参数指定索引中的项数。freq是频率,“M”表示一个月的最后一天。就freq参数的参数而言,date_range相当灵活。
pd.date_range(start='2020-01-10', periods=10, freq='6D')
period_range 函数
返回一个周期索引。语法类似于date_range函数,这里可以返回月份
pd.period_range('2018', periods=10, freq='M')
timedelta_range 函数
返回timedeltaIndex
pd.timedelta_range(start='0', periods=24, freq='H')
偏移量
对于一个时间序列,可以制定一个偏移量,在计算均线的时候十分有用
A = pd.date_range('2020-01-01', periods=10, freq='D')
A
在序列中增加一周的偏移量
A + pd.offsets.Week()