pandas之处理时间序列数据

一、datetime库

datetime库中有以下几种类型:
在这里插入图片描述

from datetime import datetime
from datetime import timedelta

1. 字符串与datetime相互转换

datetime转换为字符串

stamp = datetime(2022, 4, 8)

str(stamp) # 结果:'2022-04-08 00:00:00'

stamp.strftime('%Y-%m-%d') # 结果:'2022-04-08'

在这里插入图片描述
将字符串转化为datetime:

datetime.strptime是在已知格式的情况下转换日期的好方式:

s = '2022-04-09'
datetime.strptime(s, '%Y-%m-%d') # 结果:datetime.datetime(2022, 4, 9, 0, 0)

每次都必须编写一个格式代码可能有点烦人,特别是对于通用日期格式。在这种情况下,你可以使用第三方dateutil包的parser.parse方法(这个包在安装pandas时已经自动安装,所以不需额外安装):

from dateutil.parser import parse

s = '2022-04-09'
parse(s) # 结果:datetime.datetime(2022, 4, 9, 0, 0)

dateutil能够解析大部分人类可理解的日期表示:

parse('Jan 31, 2022 10:45 PM') # 结果:datetime.datetime(2022, 1, 31, 22, 45)

如果日期出现在月份之前,可以传递dayfirst=True来表明这种情况:

parse('9/4/2022', dayfirst=True) # 结果:datetime.datetime(2022, 4, 9, 0, 0)

二、pandas中的时间序列数据

1. to_datetime方法

pandas中的to_datetime方法可以转换很多不同的日期表示格式:

s = '2022-04-09'
pd.to_datetime(s) # 结果:Timestamp('2022-04-09 00:00:00')

同时转换多个日期,即传入列表(datetime.strptimeparse不能):

dates = ['2022-04-01', '2022-04-03','2022-04-05','2022-04-07','2022-04-09']
pd.to_datetime(dates) # 结果:DatetimeIndex(['2022-04-01', '2022-04-03', '2022-04-05', '2022-04-07', '2022-04-09'], dtype='datetime64[ns]', freq=None)

to_datetime方法生成的是Timestamp对象。

同样的,也可以传递dayfirst=True

参考pandas中的to_datetime()方法

另外,to_datetime方法还可以处理那些被认为是缺失值的值:

dt = ['2022-04-09', '2022-04-10', None]
pd.to_datetime(dt) # 结果:DatetimeIndex(['2022-04-09', '2022-04-10', 'NaT'], dtype='datetime64[ns]', freq=None)

其中,NaT(Not a time)是pandas中时间戳数据的是null值。

2. 作为索引

时间序列数据可作为series和dataframe的索引,以Series为例。

2.1 短的序列

dates = pd.to_datetime(['2022-04-01', '2022-04-03','2022-04-05','2022-04-07','2022-04-09'])
ds = pd.Series(np.random.uniform(0, 1, 5), index=dates)

ds:

2022-04-01    0.089425
2022-04-03    0.917701
2022-04-05    0.222676
2022-04-07    0.450355
2022-04-09    0.125723
dtype: float64
  • 可以像普通的Series一样进行选择:
ds[1] # 结果:0.9177005610779598
  • 也可以传入相应的时间序列数据:
ds['2022-04-03'] # 结果:0.9177005610779598
  • 还可以传递一个能解释为日期的字符串:
ds['2022/04/03'] # 结果:0.9177005610779598

2.2 长的序列

longer_ds = pd.Series(data=np.random.uniform(0, 1, 1000), index=pd.date_range('2022-01-01', periods=1000))

pandas 时间序列之pd.date_range()

longer_ds:

2022-01-01    0.807610
2022-01-02    0.559262
2022-01-03    0.216209
2022-01-04    0.577930
2022-01-05    0.674460
                ...   
2024-09-22    0.407143
2024-09-23    0.730174
2024-09-24    0.803955
2024-09-25    0.647067
2024-09-26    0.338940
Freq: D, Length: 1000, dtype: float64
  • 可以传递一个年份来选择数据:
longer_ds['2022']

输出结果:

2022-01-01    0.807610
2022-01-02    0.559262
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值