看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
时间周期的特点是有开始时间有结束时间,也会有一个周期频率(虽然有时候也会没有),广泛应用在经济、物理、金融等领域。
可以使用 pd.DatetimeIndex()
和 pd.Index()
来构造时间范围数据:
import datetime
dates = [datetime.datetime(2012, 5, 1),
datetime.datetime(2012, 5, 2),
datetime.datetime(2012, 5, 3)]
# 无频率
pd.DatetimeIndex(dates)
pd.Index(dates) # 效果同上
'''
DatetimeIndex(['2012-05-01',
'2012-05-02',
'2012-05-03'],
dtype='datetime64[ns]', freq=None)
'''
当然,可以解析时间格式:
pd.date_range(start='1/1/2018', end='1/08/2018')
'''
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08'],
dtype='datetime64[ns]', freq='D')
'''
可以指定周期数:
pd.date_range(start='1/1/2018', periods=8)
'''
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08'],
dtype='datetime64[ns]', freq='D')
'''
结尾指定周期后会向前生成:
pd.date_range(end='1/1/2018', periods=8)
'''
DatetimeIndex(['2017-12-25', '2017-12-26', '2017-12-27', '2017-12-28',
'2017-12-29', '2017-12-30', '2017-12-31', '2018-01-01'],
dtype='datetime64[ns]', freq='D')
'''
如果开始、结束、周期都有指定,会自动按周期进行分隔:
pd.date_range(start='2018-04-24', end='2018-04-27', periods=3)
'''
DatetimeIndex(['2018-04-24 00:00:00', '2018-04-25 12:00:00',
'2018-04-27 00:00:00'],
dtype='datetime64[ns]', freq=None)
'''
date_range
的默认频率是 D
日,可以指定为其他频率,参见 时间偏移别名。
# 指定频率为月
pd.date_range(start='1/1/2018', periods=5, freq='M')
DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30',
'2018-05-31'],
dtype='datetime64[ns]', freq='M')
在实际使用中,我们只需要给出开始和结束时间和频率,pd.date_range
系统会快速生成时间范围数据:
start = datetime.datetime(2011, 1, 1)
end = datetime.datetime(2012, 1, 1)
pd.date_range(start, end)
'''
DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04',
'2011-01-05', '2011-01-06', '2011-01-07', '2011-01-08',
'2011-01-09', '2011-01-10',
...
'2011-12-23', '2011-12-24', '2011-12-25', '2011-12-26',
'2011-12-27', '2011-12-28', '2011-12-29', '2011-12-30',
'2011-12-31', '2012-01-01'],
dtype='datetime64[ns]', length=366, freq='D')
'''
多个单位频率:
# 三个月
pd.date_range(start='1/1/2018', periods=5, freq='3M')
'''
DatetimeIndex(['2018-01-31', '2018-04-30', '2018-07-31', '2018-10-31',
'2019-01-31'],
dtype='datetime64[ns]', freq='3M')
'''
频率也可以使用时间偏移:
# 三个月,取月最后一天
pd.date_range(start='1/1/2018', periods=5, freq=pd.offsets.MonthEnd(3))
'''
DatetimeIndex(['2018-01-31', '2018-04-30', '2018-07-31', '2018-10-31',
'2019-01-31'],
dtype='datetime64[ns]', freq='3M')
'''
可以指定时区:
# 东京时间
pd.date_range(start='1/1/2018', periods=5, tz='Asia/Tokyo')
'''
DatetimeIndex(['2018-01-01 00:00:00+09:00', '2018-01-02 00:00:00+09:00',
'2018-01-03 00:00:00+09:00', '2018-01-04 00:00:00+09:00',
'2018-01-05 00:00:00+09:00'],
dtype='datetime64[ns, Asia/Tokyo]', freq='D')
'''
closed
可以做开始和结束时间开闭区间的控制:
# None 两边都包含
pd.date_range(start='2017-01-01', end='2017-01-04', closed=None)
'''
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04'],
dtype='datetime64[ns]', freq='D')
'''
# left 不包含右边
pd.date_range(start='2017-01-01', end='2017-01-04', closed='left')
'''
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03'],
dtype='datetime64[ns]', freq='D')
'''
# right 不包含左边
pd.date_range(start='2017-01-01', end='2017-01-04', closed='right')
'''
DatetimeIndex(['2017-01-02', '2017-01-03', '2017-01-04'],
dtype='datetime64[ns]', freq='D')
'''
pd.bdate_range
可以生成一个以工作日频率的日期范围,周末两天将会被跳过:
pd.bdate_range(start='1/1/2021', end='1/08/2021')
'''
DatetimeIndex(['2021-01-01', '2021-01-04', '2021-01-05', '2021-01-06',
'2021-01-07', '2021-01-08'],
dtype='datetime64[ns]', freq='B')
'''
在四个参数中:开始,结束,周期和频率,必须精确指定三个。 指定频率是 bdate_range
的要求。 如果不需要指定频率,请使用 date_range。
以上两个方法中都会要求传入频率,频率可以用时间偏移对象(DateOffset objects)的别名表示。详见 时间偏移别名。
更新时间:2020-06-11 16:53:30 标签:pandas 时间 周期