Pandas 时间序列之 Timestamp
1. 前言
上一小节,我们了解了 Pandas 库中时间序列的特点和三类常用时间序列的类型,从本小节开始,我们将针对每一类时间序列展开详细的学习,本小节我们将学习时间序列之时间戳 (Timestamp) 的详细特点和创建方法。
2. 时间戳
时间戳表示特定的时间点,在 Pandas 中的提供了时间戳数据类型 Timestamp 。
2.1 时间戳的创建方法
Pandas 库中提供了函数供时间戳的创建,其中有几个常用参数,我们这在这里列举一下:
pd.Timestamp(ts_input, freq=None, tz=None, unit=None,year=None, month=None, day=None, hour=None, minute=None,second=None, microsecond=None, nanosecond=None, tzinfo=None)
参数名 | 说明 |
---|---|
ts_input | 要转换为时间戳的值 |
tz | 时区,如 tz=‘Asia/Shanghai’ 上海时区 |
year、month、day | 年、月、日 |
hour、minute、second、microsecond、nanosecond | 时、分、秒、微秒、纳秒 |
下面我们通过代码展示一下 Timestamp () 函数创建时间戳的操作:
# 导入 pandas 数据包
import pandas as pd
date_res=pd.Timestamp("2020-12-23")
print(date_res)
print(type(date_res))
# --- 输出结果 ---
2020-12-23 00:00:00
<class 'pandas.\_libs.tslibs.timestamps.Timestamp'>
# 结果解析:这里我们通过直接传一个字符串的日期数据,Timestamp() 函数会创建一个时间戳数据
date_res=pd.Timestamp(year=2021,month=1,day=3,hour=12,minute=23,second=22)
print(date_res)
print(type(date_res))
# --- 输出结果 ---
2021-01-03 12:00:22
<class 'pandas.\_libs.tslibs.timestamps.Timestamp'>
# 结果解析:这里我们通过指定年月日时分秒,生成一个时间戳,如果我们不指定对应的数值,默认是 0
2.2 时间戳常用的属性和方法
Pandas 时间戳对象中提供了丰富的属性,便于对时间戳的处理,这里我们通过代码具体演示几个常用的属性和方法。
- weekofyear 属性
获取该时间戳在当年的第多少周
date_res=pd.Timestamp("2020-3-17",tz='Asia/Shanghai')
print(date_res.weekofyear)
# --- 输出结果 ---
12
- dayofyear 属性
获取该时间是一年的第多少天
date_res=pd.Timestamp("2021-1-6",tz='Asia/Shanghai')
print(date_res.dayofyear)
# --- 输出结果 ---
6
- is_year_end 属性
获取该时间戳是否是一年的最后一天
date_res=pd.Timestamp("2021-1-6",tz='Asia/Shanghai')
print(date_res.is_year_end)
# --- 输出结果 ---
False
- now() 方法
获取当前时间的方法
date_res=pd.Timestamp("2020-3-17",tz='Asia/Shanghai')
print(date_res.now())
# --- 输出结果 ---
2021-01-06 21:30:08.051878
- day_name() 方法
获取时间戳是星期几名字的方法
date_res=pd.Timestamp("2021-1-6",tz='Asia/Shanghai')
print(date_res.day_name())
# --- 输出结果 ---
Wednesday
- isocalendar() 方法
获取时间戳是那一年,这一年的第几周,周几这三个值
date_res=pd.Timestamp("2021-1-6",tz='Asia/Shanghai')
print(date_res.isocalendar())
# --- 输出结果 ---
(2021, 1, 3)
2.3 时间戳索引
上面我讲到的时间戳,在放到数据集中,我们可以将其作为时间戳索引,便于我们在时间基础上对数据的处理和分析,时间戳作为索引序列对应的对应的类型是 DatetimeIndex ,它可以用于 Series 和 DataFrame 的数据集中。下面我们通过构造一组 Series 数据,来进行演示创建时间索引 DatetimeIndex 和时间索引数据的查找特点:
# 导入 pandas 数据包
import pandas as pd
df_data=pd.Series([786,890,977,912,825,586], index=['2017-04-12','2017-05-17','2018-04-12','2020-05-16','2018-05-12','2020-04-12'])
print(df_data)
# --- 输出结果 ---
2017-04-12 786
2017-05-17 890
2018-04-12 977
2020-05-16 912
2018-05-12 825
2020-04-12 586
dtype: int64
输出解析:这里看到我们的数据索引是一组年月日的数据格式,但他们的数据类型并不是时间序列,而是字符串。这里我们要用到 DatetimeIndex () 函数将一组数据转换为时间戳索引:
# 通过 DatetimeIndex() 函数 转换为时间戳索引
index_date=pd.DatetimeIndex(['2017-04-12','2017-05-17','2018-04-12','2020-05-16',
'2018-05-12','2020-04-12'])
df_data=pd.Series([786,890,977,912,825,586],index=index_date)
print(df_data)
# --- 输出结果 ---
2017-04-12 786
2017-05-17 890
2018-04-12 977
2020-05-16 912
2018-05-12 825
2020-04-12 586
dtype: int64
# 结果解析:在输出结果上和之前没有什么区别,但这里我们能方便的对数据的时间索引进行查找操作,可以直接获得某一年的数据:
print(df_data['2017'])
# --- 输出结果 ---
2017-04-12 786
2017-05-17 890
dtype: int64
除了上面通过 DatetimeIndex () 函数创建时间戳索引,我们还可以通过 date_range () 函数来生成时间戳索引,具体操作如下:
# 导入 pandas 数据包
import pandas as pd
index_date=pd.date_range(start="2020-12-20 01:00:00",end="2020-12-20 12:00:00",freq="2H")
series_data=pd.Series([786,890,977,912,825,586],index=index_date)
print(series_data)
# --- 输出结果 ---
2020-12-20 01:00:00 786
2020-12-20 03:00:00 890
2020-12-20 05:00:00 977
2020-12-20 07:00:00 912
2020-12-20 09:00:00 825
2020-12-20 11:00:00 586
Freq: 2H, dtype: int64
3. 小结
本节课程我们主要学习了 Pandas 库中的时间戳,表示具体的时间点,学习如何创建一个时间戳,时间戳中常用的方法和属性,以及时间戳索引的相关知识。本节课程的重点如下:
- 创建时间戳,以及时间戳中常用的方法和属性;
- 时间戳索引的特点,以及如何将时间数据转换为时间戳索引。