时间:2021-05-22
前言
在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据,比如量化交易就是从历史数据中寻找股价的变化规律。Python中自带的处理时间的模块有datetime,NumPy库也提供了相应的方法,Pandas作为Python环境下的数据分析库,更是提供了强大的日期数据处理的功能,是处理时间序列的利器。
1、生成日期序列
主要提供pd.data_range()和pd.period_range()两个方法,给定参数有起始时间、结束时间、生成时期的数目及时间频率(freq='M'月,'D'天,‘W',周,'Y'年)等。
两种主要区别在于pd.date_range()生成的是DatetimeIndex格式的日期序列;pd.period_range()生成的是PeriodIndex格式的日期序列。
以下通过生成月时间序列和周时间序列来对比下:
date_rng = pd.date_range('2019-01-01', freq='M', periods=12)print(f'month date_range():{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)print(f'month period_range():{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', periods=12)print(f'week date_range():{date_rng}')"""week date_range():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)print(f'week period_range():{period_rng}')"""week period_range():PeriodIndex(['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'], dtype='period[W-SUN]', freq='W-SUN')"""date_rng = pd.date_range('2019-01-01 00:00:00', freq='H', periods=12)print(f'hour date_range():{date_rng}')"""hour date_range():DatetimeIndex(['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)print(f'hour period_range():{period_rng}')"""hour period_range():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、生成Timestamp对象及转换
创建一个Timestamp时间戳对象有pd.Timestamp()方法和pd.to_datetime()方法。如下所示:
ts=pd.Timestamp(2019,1,1)print(f'pd.Timestamp()-1:{ts}')#pd.Timestamp()-1:2019-01-01 00:00:00ts=pd.Timestamp(dt(2019,1,1,hour=0,minute=1,second=1))print(f'pd.Timestamp()-2:{ts}')#pd.Timestamp()-2:2019-01-01 00:01:01ts=pd.Timestamp("2019-1-1 0:1:1")print(f'pd.Timestamp()-3:{ts}')#pd.Timestamp()-3:2019-01-01 00:01:01print(f'pd.Timestamp()-type:{type(ts)}')#pd.Timestamp()-type:<class 'pandas._libs.tslibs.timestamps.Timestamp'>#dt=pd.to_datetime(2019,1,1) 不支持dt=pd.to_datetime(dt(2019,1,1,hour=0,minute=1,second=1))print(f'pd.to_datetime()-1:{dt}')#pd.to_datetime()-1:2019-01-01 00:01:01dt=pd.to_datetime("2019-1-1 0:1:1")print(f'pd.to_datetime()-2:{dt}')#pd.to_datetime()-2:2019-01-01 00:01:01print(f'pd.to_datetime()-type:{type(dt)}')#pd.to_datetime()-type:<class 'pandas._libs.tslibs.timestamps.Timestamp'>#pd.to_datetime生成自定义时间序列dtlist=pd.to_datetime(["2019-1-1 0:1:1", "2019-3-1 0:1:1"])print(f'pd.to_datetime()-list:{dtlist}')#pd.to_datetime()-list:DatetimeIndex(['2019-01-01 00:01:01', '2019-03-01 00:01:01'], dtype='datetime64[ns]', freq=None)#时间戳转换为period月时期pr = ts.to_period('M')print(f'ts.to_period():{pr}')#ts.to_period():2019-01print(f'pd.to_period()-type:{type(pr)}')#pd.to_period()-type:<class 'pandas._libs.tslibs.period.Period'>3、生成period对象及转换
#定义时期periodper=pd.Period('2019')print(f'pd.Period():{per}')#pd.Period():2019per_del=pd.Period('2019')-pd.Period('2018')print(f'2019和2018间隔{per_del}年')#可以直接+、-整数(代表年)#2019和2018间隔1年#时期转换为时间戳print(per.to_timestamp(how='end'))#2019-12-31 00:00:00print(per.to_timestamp(how='start'))#2019-01-01 00:00:004、生成时间间隔Timedelta
#生成时间间隔Timedeltaprint(pd.Timedelta(days=5, minutes=50, seconds=20, milliseconds=10, microseconds=10, nanoseconds=10))#5 days 00:50:20.010010#获取当前时间now=pd.datetime.now()#计算当前时间往后50天的日期dt=now+pd.Timedelta(days=50)print(f'当前时间是{now}, 50天后时间是{dt}')#当前时间是2019-06-08 17:59:31.726065, 50天后时间是2019-07-28 17:59:31.726065#只显示年月日print(dt.strftime('%Y-%m-%d'))#2019-07-285、重采样及频率转换
#asfreq 按季度显示索引值#'DatetimeIndex' object has no attribute 'asfreq'date=pd.date_range('1/1/2018', periods=20, freq='D')tsdat_series=pd.Series(range(20),index=date)tsp_series=tsdat_series.to_period('D')print(tsp_series.index.asfreq('Q'))date=pd.period_range('1/1/2018', periods=20, freq='D')tsper_series=pd.Series(range(20),index=date)print(tsper_series.index.asfreq('Q'))"""PeriodIndex(['2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1'], dtype='period[Q-DEC]', freq='Q-DEC')"""#resample 按季度统计并显示print(tsdat_series.resample('Q').sum().to_period('Q'))"""2018Q1 190Freq: Q-DEC, dtype: int64"""#groupby 按周进行汇总求平均值print(tsdat_series.groupby(lambda x:x.weekday).mean())"""0 7.01 8.02 9.03 10.04 11.05 12.06 9.5dtype: float64"""以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在此记录自己学习python数据分析过程中学到的一些数据处理的小技巧。1.数据的读取#导入numpy库和pandas库importnumpyasnpimport
问题你需要处理一个很大的数据集并需要计算数据总和或其他统计量。解决方案对于任何涉及到统计、时间序列以及其他相关技术的数据分析问题,都可以考虑使用Pandas库。
本文主要分享基于python的数据分析三方库pandas,numpy的一次爬坑经历,发现并分析了python语言对于浮点数精度处理不准确的问题,并在最后给出合理
在python中经常会用到pandas来处理数据,最常用的数据类型是dataframe,但是有时候在dataframe有时间字段需要画时间序列图的时候会遇到一些
项目实现知识点:Pandas库及pyecharts库Pandas:数据分析和处理工具。pd.read_csv():读取csv文件。pyecharts:绘图库,提