在使用Python进行数据分析时,经常会遇到时间和日期格式的处理和转换,尤其是时间相关数据的分析和挖掘。比如量化交易就是从历史数据中寻找股价的变化规律。Python自带的处理时间的模块包括datetime,NumPy库也提供了相应的方法。熊猫作为Python环境下的数据分析库,提供了强大的数据处理功能,是处理时间序列的利器。
1.生成日期系列
主要提供pd.data_range()和pd.period_range()两种方法。给定的参数包括开始时间、结束时间、生成周期数和时间频率(频率=‘M’个月,‘D’天,‘w’,周,‘Y’年)等。
两个主要区别是pd.date_range()以DatetimeIndex格式生成日期序列。Pd.period_range()以periodindexformat生成日期序列。
下面通过生成每月时间序列和每周时间序列进行比较:
date _ RNG = PD . date _ range(' 2019-01-01 ',freq='M ',句点=12)
打印(f ' month date _ range(): n { date _ RNG } ')
date_range():
DatetimeIndex(['2019-01-31 ',' 2019-02-28 ',' 2019-03-31 ',' 2019-04-30 ',
'2019-05-31', '2019-06-30', '2019-07-31', '2019-08-31',
'2019-09-30', '2019-10-31', '2019-11-30', '2019-12-31'],
dtype='datetime64[ns]',freq='M ')
period _ RNG = PD . period _ range(' 2019/01/01 ',freq='M ',periods=12)
打印(f ' month period _ range(): n { period _ RNG } ')
period_range():
PeriodIndex(['2019-01 ',' 2019-02 ',' 2019-03 ',' 2019-04 ',' 2019-05 ',' 2019-06 ',
'2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2019-12'],
dtype='period[M]',freq='M ')
date _ RNG = PD . date _ range(' 2019-01-01 ',freq='W-SUN ',句点=12)
打印(f ' week date _ range(): n { date _ RNG } ')
周日期范围():
DatetimeIndex(['2019-01-06 ',' 2019-01-13 ',' 2019-01-20 ',' 2019-01-27 ',
'2019-02-03', '2019-02-10', '2019-02-17', '2019-02-24',
'2019-03-03', '2019-03-10', '2019-03-17', '2019-03-24'],
dtype='datetime64[ns]',freq='W-SUN ')
period _ RNG = PD . period _ range(' 2019-01-01 ',freq='W-SUN ',periods=12)
打印(f ' week period _ range(): n { period _ RNG } ')
周期间_范围():
period index([' 2018-12-31/2019-01-06 ',' 2019-01-07/2019-01-13 ',
'2019-01-14/2019-01-20', '2019-01-21/2019-01-27',
'2019-01-28/2019-02-03', '2019-02-04/2019-02-10',
'2019-02-11/2019-02-17', '2019-02-18/2019-02-24',
'2019-02-25/2019-03-03', '2019-03-04/2019-03-10',
'2019-03-11/2019-03-17', '2019-03-18/2019-03-24'],
数据类型= '句点[W-SUN]',频率='W-SUN ')
date _ RNG = PD . date _ range(' 2019-01-01 00:00:00 ',freq='H ',句点=12)
打印(f ' hour date _ range(): n { date _ RNG } ')
小时日期范围():
datetime index([' 2019-01-01 00:00:00 ',' 2019-01-01 01:00:00 ',
'2019-01-01 02:00:00', '2019-01-01 03:00:00',
'2019-01-01 04:00:00', '2019-01-01 05:00:00',
'2019-01-01 06:00:00', '2019-01-01 07:00:00',
'2019-01-01 08:00:00', '2019-01-01 09:00:00',
'2019-01-01 10:00:00', '2019-01-01 11:00:00'],
dtype='datetime64[ns]',freq='H ')
period _ RNG = PD . period _ range(' 2019-01-01 00:00:00 ',freq='H ',periods=12)
打印(f ' hour period _ range(): n { period _ RNG } ')
小时周期_范围():
PeriodIndex(['2019-01-01 00:00 ',' 2019-01-01 01:00 ',' 2019-01-01 02:00 ',
'2019-01-01 03:00', '2019-01-01 04:00', '2019-01-01 05:00',
'2019-01-01 06:00', '2019-01-01 07:00', '2019-01-01 08:00',
'2019-01-01 09:00', '2019-01-01 10:00', '2019-01-01 11:00'],
dtype='period[H]',freq='H ')
2.生成时间戳对象并转换它们
有PD。Timestamp()方法和pd.to_datetime()方法来创建时间戳对象。如下所示:
ts=pd。时间戳(2019,1,1)
print(f'pd.Timestamp()-1:{ts} ')
#警察。timestamp()-1:2019-01-01 00:00:00
ts=pd。时间戳(dt(2019,1,1,小时=0,分钟=1,秒=1))
print(f'pd.Timestamp()-2:{ts} ')
#警察。timestamp()-2:2019-01-01 00:01:01
ts=pd。时间戳(2019-1-1 0:1:1)
print(f'pd.Timestamp()-3:{ts} ')
#警察。timestamp()-3:2019-01-01 00:01:01
print(f ' PD . timestamp()-类型:{type(ts)} ')
#警察。timestamp()-类型:
不支持#dt=pd.to_datetime(2019,1,1)
dt=pd.to_datetime(dt(2019,1,1,小时=0,分钟=1,秒=1))
print(f ' PD . to _ datetime()-1:{ dt } ')
# PD . to _ datetime()-1:2019-01-01 00:01:01
dt = PD . to _ datetime(2019-1-10:1:1)
print(f ' PD . to _ datetime()-2:{ dt } ')
# PD . to _ datetime()-2:2019-01-01 00:01:01
print(f ' PD . to _ datetime()-类型:{type(dt)} ')
# PD . to _ datetime()-类型:
#pd.to_datetime生成自定义时间序列
dtlist = PD . to _ datetime([2019-1-10:1:1,2019-3-1 0:1:1])
print(f ' PD . to _ datetime()-list:{ dtlist } ')
# PD . to _ datetime()-list:datetime index([' 2019-01-01 00:01:01 ',' 2019-03-01 00:01:01'],dt type = ' datetime 64[ns]',freq=None)
#时间戳转换为期间月期间
pr = ts.to_period('M ')
print(f'ts.to_period():{pr} ')
#ts.to_period():2019-01
print(f ' PD . to _ period()-type:{ type(pr)} ')
# PD . to _ period()-类型:
3.生成周期对象并对其进行转换
#定义期间
per=pd。期间(' 2019 ')
打印(f'pd.Period():{per} ')
#警察。期间():2019
per_del=pd。句号(' 2019')-pd。期间(' 2018 ')
print(f ' interval of 2019 and 2018 { per _ del } years ')#可以是+和-(表示年份)的直接整数
#2019和2018相隔一年
#时间段转换为时间戳
打印(per . to _ timestamp(how = ' end '))# 2019-12-31 00:00:00
打印(per . to _ timestamp(how = ' start '))# 2019-01-01 00:00:00
4.生成时间间隔时间增量
#生成时间间隔时间增量
打印(pd。时间增量(天数=5,分钟=50,秒=20,毫秒=10,微秒=10,纳秒=10))
#5天00:50:20.010010
#获取当前时间
now=pd.datetime.now()
#计算当前时间后50天的日期
dt=now+pd。时间增量(天数=50)
打印(f '当前时间为{now},50天后时间为{dt} ')
#当前时间为2019年6月8日17: 59: 31.726065,50天后时间为2019年7月28日17: 59: 31.726065。
#仅显示年、月和日
打印(dt . str time(' % Y-% m-% d ')# 2019-07-28
5.重采样和频率转换
#asfreq按季度显示指数值
#“DateTimeIndex”对象没有属性“asfreq”
date=pd.date_range('1/1/2018 ',periods=20,freq='D ')
tsdat_series=pd。系列(范围(20),指数=日期)
tsp _ series = ts dat _ series . to _ period(' D ')
print(tsp _ series . index . asfreq(' Q '))
date=pd.period_range('1/1/2018 ',periods=20,freq='D ')
tsper_series=pd。系列(范围(20),指数=日期)
print(ts per _ series . index . asfreq(' Q '))
PeriodIndex(['2018Q1 ',' 2018Q1 ',' 2018Q1 ',' 2018Q1 ',' 2018Q1 ',' 2018Q1 ',
2018Q1 ',' 2018Q1 ',' 2018Q1 ',' 2018Q1 ',' 2018Q1 ',' 2018Q1 ',
2018Q1 ',' 2018Q1 ',' 2018Q1 ',' 2018Q1 ',' 2018Q1 ',' 2018Q1 ',
2018年第1季度',' 2018年第1季度'],
dtype='period[Q-DEC]',freq='Q-DEC ')
#重新取样按季度计数和显示
print(tsdat_series.resample('Q '))。sum()。to_period('Q '))
2018年第1季度190
Freq: Q-DEC,数据类型:int64
#groupby汇总并按周平均
print(ts dat _ series . group by(lambda x:x . weekday)。均值())
0 7.0
1 8.0
2 9.0
3 10.0
4 11.0
5 12.0
6 9.5
dtype: float64
1.《FREQ Pandas库基础分析——详解时间序列的处理》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《FREQ Pandas库基础分析——详解时间序列的处理》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1203873.html