Pandas时序数据
前言
- 在数据分析中,时序数据是一类非常重要的数据。事物的发展总是伴随着时间的推移,数据也会在各个时间点上产生。
一、python中的时间表示-datetime 模块
? Python的标准库datetime 支持创建和处理时间,Pandas的时间时序模块是在datetime 的基础上建立的。
- 换取当前时间
import datetime
now = datetime.datetime.now()
- 其中now的全貌如下,是一个
datetime 对象:
now: datetime.datetime(2022, 3, 6, 18, 37, 10, 132078)
? datetime.datetime 对象常用的方法:
? (1) strftime() : 对datetime 对象的格式进行转换。使用含% 的占位符书写目标格式,如:
newForm = now.strftime("%Y-%m-%d (%H:%M:%S)")
? 各占位符的含义如下
% y 两位数的年份表示(00 - 99)
% Y 四位数的年份表示(000 - 9999)
% m 月份(01 - 12)
% d 月内中的一天(0 - 31)
% H 24小时制小时数(0 - 23)
% I 12小时制小时数(01 - 12)
% M 分钟数(00 = 59)
% S 秒(00 - 59)
% a 本地简化星期名称
% A 本地完整星期名称
% b 本地简化的月份名称
% B 本地完整的月份名称
% c 本地相应的日期表示和时间表示
% j 年内的一天(001 - 366)
% p 本地A.M.或P.M.的等价符
% U 一年中的星期数(00 - 53)星期天为星期的开始
% w 星期(0 - 6),星期天为星期的开始
% W 一年中的星期数(00 - 53)星期一为星期的开始
% x 本地相应的日期表示
% X 本地相应的时间表示
% Z 当前时区的名称
% % % 号本身
- 指定时间
- 向
datetime.datetime() 中传入对应的参数,默认按照单位从大到小指定
birthday = datetime.datetime(2001, 1, 11)
print(birthday)
? 也可以通过参数指定,其中year 、monnth 、day 三个参数必须指定
yeaterday = datetime.datetime(year=2022, month=3, day=5)
print(yeaterday)
-
运算 (1) datetime.datetime 对象之间支持减法运算,得到的是一个datetime.timedelta 对象 delta = yeaterday - birthday
二、 Pandas 处理时序序列
-
pd.Timestamp()
-
pd.Timestamp() 是Pandas 定义事时间的主要函数, 支持更丰富的定义时间的构造方法 (1) 根据datetime.datetime 对象 now = pd.Timestamp(datetime.datetime.now())
print(now)
(2) 根据字符串 today = pd.Timestamp("2022-03-06")
print(today)
(3) 更具指定的参数 yesterday = pd.Timestamp(2022, 3, 5)
now = pd.Timestamp("now")
(4) 根据时间戳 pd.Timestamp(1646565103.114923, unit="s")
-
pd.Timedelta() pd.Timedelta() 用于创建时间差对象,也具有与pd.Timestamp() 类似的构造方法。 (1) 根据字符串创建 oneDay = pd.Timedelta("1 days")
duration = pd.Timedelta("2 days 2 hours")
(2) 指定参数创建 oneDay = pd.Timedelta(days=1)
-
运算
与`datetime`模块运算类似,`pandas`的`Timestamp`对象之间相减可以得到`Timedelta`对象。
- 时间索引
- 数据表中长常使用时间作为索引,
pandas 支持创建长时间序列
? (1) pd.to_datetime()
-
pd.to_datetime() 支持将时间对象和类时间字符串转化为DatetimeIndex 对象。 index = pd.to_datetime(["03/06/2022", datetime.datetime.now()])
print(index)
? (2) pd.date_range()
? pd.date_range() 可以给定开始时间或者结束时间,并且指定周期数据,周期频率,会自动生成在此范围的时间索引数据:
index = pd.date_range(start="2022-01-01", periods=10)
print(index)
'2022-01-05', '2022-01-06', '2022-01-07', '2022-01-08',
'2022-01-09', '2022-01-10'],
dtype='datetime64[ns]', freq='D')
? 如果要跳过休息日可以使用pd.bdate_range() 函数
?
|