轩小陌的Python笔记-Pandas时间序列与日期

这篇博客详细介绍了Pandas中关于时间序列与日期的操作,包括时间构造函数如pd.Timestamp和pd.Period,时间戳转换,索引访问,日期时间属性,dt属性接口,重采样以及时间差的计算。内容涵盖了date_range、bdate_range、to_datetime、DatetimeIndex构造、错误处理以及重采样功能的使用等。
摘要由CSDN通过智能技术生成

Pandas时间序列与日期

一、时间构造函数

1.1 pandas构造时间的函数

pandas 中的 datetime() 与 python 的 datetime 模块使用方法是一致的。

now = datetime.datetime.now()
type(now)
>>输出结果:
datetime.datetime

now1 = pd.datetime.now()
type(now1)
>>输出结果:
datetime.datetime

now.date()
>>输出结果:
datetime.date(2022, 5, 5)

now.time()
>>输出结果:
datetime.time(17, 14, 28, 930559)

now.hour, now.day, now.year, now.month, now.second
>>输出结果:
(17, 5, 2022, 5, 28)

now.strftime('%Y-%m/%d')
>>输出结果:
'2022-05/05'

1.2 时间戳 pd.Timestamp 和时间段 pd.Period

  • 时间戳是最基本的时间序列数据,用于把数值与时点关联在一起。Pandas对象通过时间戳调用时点数据。不过,大多数情况下,用时间段改变时间变量更合适。Period 表示的时间段更直观,还可以用日期时间格式的字符串进行推断。

  • 时间戳和时间段都可以与整数做加减运算,以freq指定的参数为单位,freq参数的可选字符串:

别名 偏移量类型 说明
D Day 每日历日
B BusinessDay 每工作日
H Hour 每小时
T或min Minute 每分
S Second 每秒
L或ms Milli 每毫秒(即每千分之一秒)
U Micro 每微秒(即每百万分之一秒)
M MonthEnd 每月最后一个日历日
BM BusinessMonthEnd 每月最后一个工作日
MS MonthBegin 每月第一个日历日
BMS BusinessMonthBegin 每月第一个工作日
ts = pd.Timestamp('2022-01-01 11:13:19', freq='H')
>>输出结果:
Timestamp('2022-01-01 11:13:19', freq='H')

ts + 1
>>输出结果:
Timestamp('2022-01-01 12:13:19', freq='H')

ts1 = pd.Period('2011-01-01 11:13:19', freq='D')
>>输出结果:
Period('2011-01-01', 'D')

ts1 + 1
>>输出结果:
Period('2011-01-02', 'D')
  • Timestamp 与 Period 可以用作索引。作为索引的 Timestamp 与 Period 列表会被强制转换为对应的 DatetimeIndex 与 PeriodIndex。
date = [pd.Timestamp('2015-05-01'), pd.Timestamp('2012-05-02'), pd.Timestamp('2012-05-03')]
ts = pd.Series(np.random.randn(3), index=date)
>>输出结果:
2015-05-01    0.388782
2012-05-02   -0.994027
2012-05-03    1.043194
dtype: float64

ts.index
>>输出结果:
DatetimeIndex(['2015-05-01', '2012-05-02', '2012-05-03'], dtype='datetime64[ns]', freq=None)

date1 = [pd.Period('2015-05-01'), pd.Period('2012-05-02'), pd.Period('2012-05-03')]
ts1 = pd.Series(np.random.randn(3), index=date1)
>>输出结果:
2015-05-01    1.616632
2012-05-02   -1.601359
2012-05-03   -1.353825
Freq: D, dtype: float64

ts1.index
>>输出结果:
PeriodIndex(['2015-05-01', '2012-05-02', '2012-05-03'], dtype='period[D]', freq='D')

1.3 构造时间序列date_range、bdate_range()

  • 在实际工作中,经常要生成含大量时间戳的超长索引,如果一个一个输入时间戳会很低效
  • 如果时间戳是定频的,用 date_range() 与 bdate_range() 函数即可创 DatetimeIndex
  • date_range 默认的频率是日历日,bdate_range 的默认频率是工作日
# start:开始时间,end:结束时间,freq:生成时间间隔频率,name:时间序列的名称
pd.date_range(start='2008-01-01', end='2020-01-01', freq='2Y', name='时间')
>>输出结果:
DatetimeIndex(['2008-12-31', '2010-12-31', '2012-12-31', '2014-12-31', '2016-12-31', '2018-12-31'], dtype='datetime64[ns]', name='时间', freq='2A-DEC')

pd.bdate_range(start='2022-02-01', end='2022-02-16', freq='2B')
>>输出结果:
DatetimeIndex(['2022-02-01', '2022-02-03', '2022-02-07', '2022-02-09', '2022-02-11', '2022-02-15'], dtype='datetime64[ns]', freq='2B')

# periods:生成时间索引的数量
pd.bdate_range(start='2022-02-16' ,periods=5, freq='2B')
>>输出结果:
DatetimeIndex(['2022-02-16', '2022-02-18', '2022-02-22', '2022-02-24', '2022-02-28'], dtype='datetime64[ns]', freq='2B')

二、转换时间戳

2.1 to_datetime()

to_datetime:用于转换时间字符串纪元式及混合的日期Series或日期列表

df = pd.DataFrame(pd.Series(data=['2005/11/23', 
                  '2010.12.31', 
                  'Jul, 31, 2009', 
                  '2010-01-10', 
                  'Aug-24-2019', 
                  'Feb 1 2020',
                  '01-14-2012',
                  None], name='时间'))
df['value'] = np.random.randint(0, 100, size=8)
>>输出结果:
	时间			value
0	2005/11/23	  24
1	2010.12.31	  12
2	Jul,31,2009	  15
3	2010-01-10	  55
4	Aug-24-2019	  67
5	Feb 1 2020	  5
6	01-14-2012	  59
7	None		  74

# 时间类型的字符串,可以直接用to_datetime函数转换成Timestamp类型,并且空值会自动被解析成NaT(时间空值)
df['时间'] =
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值