(1.31)--4-5-3时区和时间差.ppt

上传人:奉*** 文档编号:96339287 上传时间:2023-11-07 格式:PPT 页数:19 大小:423.10KB
返回 下载 相关 举报
(1.31)--4-5-3时区和时间差.ppt_第1页
第1页 / 共19页
(1.31)--4-5-3时区和时间差.ppt_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《(1.31)--4-5-3时区和时间差.ppt》由会员分享,可在线阅读,更多相关《(1.31)--4-5-3时区和时间差.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第4 4章章 数据处理和分析数据处理和分析-Pandas-Pandas第第1414讲讲 时区和时间差时区和时间差Contents目录01认识时区和时间差认识时区和时间差时区时区转换和本地化转换和本地化02时区敏感型时区敏感型TimestampTimestamp对象对象03不同时区之间的运算不同时区之间的运算04时间差的时间差的运算运算0501认识时区和时间差时区和时间差时区Timezone在时间序列的处理中,经常会遇到对时区的处理。作为国际标准时间的格林威治时间(GMT)已经逐渐被协调世界时(UTC)所取代,成为目前的国际标准。在时间序列的处理中,时区是以UTC偏移量的形式表示的。在Pyth

2、on中,时区信息来自第三方库pytz,使得Python可以利用汇编了世界时区信息的Olson数据库处理时区信息。由于不同国家和地区对夏令时(DST)的不断调整,时区对历史数据的影响尤为重要。如美国的DST转变时间自1900年以来就改变过多次!Pandas封装了pytz的功能,在安装Pandas库时已经自动安装,因此无须单独安装pytz模块。在使用时区信息时,只要记住时区的名称即可,可以不用记忆其API。import pytz#导入模块 mon_timezones-5:#切片查看时区名称信息US/Eastern,US/Hawaii,US/Mountain,US/Pacific,UTC tz=py

3、tz.timezone(Asia/Shanghai)#根据时区名称获取时区对象 tz时区和时间差时间差Timedelta时间差Timedelta表示时间之间的差异,是一种绝对时间周期,类似于Python标准库的 datetime.timedelta,其时间单位可以是日、时、分、秒等,且可正可负。时间差可以由pandas.Timedelta类创建,也可以使用pandas.to_timedelta()函数也可以把符合时间差格式的标量、数组、列表、序列等数据转换为Timedelta。其中,由Timedelta类创建相应的实例对象时,可用的时间单位并没有年和月,如下表。名称名称单位单位说明说明名称名称

4、单位单位说明说明weeks无星期secondss秒daysD天millisecondsms毫秒hoursh小时microsecondsus微妙minutesm分nanosecondsns纳秒时区和时间差时间差生成-使用Timedelta类使用Timedelta类,可以对多种参数进行解析,生成时间差。pd.Timedelta(1 days 2 hours)#使用字符串生成时间差Timedelta(1 days 02:00:00)pd.Timedelta(1,unit=D)#用整数与时间单位生成时间差Timedelta(1 days 00:00:00)pd.Timedelta(-1ms)#负数时间

5、差Timedelta(-1 days+23:59:59.999000)pd.Timedelta(nat)#时间差缺失值NaT pd.Timedelta(P0DT0H1M0S)#支持ISO8601时间格式字符串Timedelta(0 days 00:01:00)pd.Timedelta(pd.offsets.Second(10)#使用DateOffset对象生成时间差Timedelta(0 days 00:00:10)时区和时间差 pd.to_timedelta(1 days 09:10:02.00003)#解析单个字符串Timedelta(1 days 09:10:02.000030)pd.t

6、o_timedelta(1 days 09:10:02.00003,15.5us,nan)#解析字符串列表或数组TimedeltaIndex(1 days 09:10:02.000030,0 days 00:00:00.000015,NaT,dtype=timedelta64ns,freq=None)pd.to_timedelta(range(3),unit=h)#unit参数指定时间差的单位TimedeltaIndex(00:00:00,01:00:00,02:00:00,dtype=timedelta64ns,freq=None)时间差生成-使用to_timedelta()函数02时区转换

7、和本地化时区转换和本地化时间序列中的时区在默认情况下,Pandas中生成的时间序列是朴素的(naive)的时区,不带有时区信息。通过设置pandas.date_range()函数等的tz参数,创建带有时区信息的时间序列,称为时区敏感型(aware)的时间序列。使用tz_localize()方法将朴素时区本地化。使用tz_convert()方法将敏感时区转换为其它时区。这两个方法适用于DatetimeIndex对象,也适用于Series和DataFrame对象。时区转换和本地化时间序列中的时区-转换示例 ts_naive=pd.date_range(2019-3-1 8:30,periods=6

8、,freq=D)#创建时间序列 ts=pd.Series(np.random.randn(len(ts_naive),index=ts_naive)#时间序列为Series对象的索引 print(ts.index.tz,ts_naive.tz)#默认无时区信息None None#创建时区敏感型时间序列 ts_aware=pd.date_range(2019-3-1 8:30,periods=6,freq=D,tz=UTC)ts_naive.tz_localize(Asia/Shanghai)#朴素时区本地化 ts_aware.tz_convert(None)#敏感时区转换为朴素时区 ts_ea

9、stern=ts_aware.tz_convert(America/New_York)#时区转换为EST03时区敏感型Timestamp对象时区敏感型Timestamp对象Timestamp对象的时区转换单独的时间戳(Timestamp)对象也能够从朴素(naive)时区本地化为敏感型(aware)时区,并可以从一个时区转换到另一个时区。时区敏感型的时间戳对象在内部保存了一个UTC时间戳值,这个时间戳值是自UNIX纪元(1970年1月1日)开始算起的纳秒数。这个UTC时间戳值在时区转换过程中保持不变。stamp=pd.Timestamp(2020-3-12 8:00)#朴素时区的时间戳对象 s

10、tamp_tz=stamp.tz_localize(UTC)#时区本地化 stamp_tz.tz_convert(America/New_York)#转换为America/New_York时区 pd.Timestamp(2020-3-12 8:00,tz=Europe/Berlin)#敏感时区的时间戳对象 stamp_tz.value#以纳秒为单位的UTC时间戳值1584000000000000000 stamp_tz.tz_convert(Asia/Shanghai).value#UTC值在时区转换时不变1584000000000000000时区敏感型Timestamp对象Timestamp

11、对象中的夏令时问题为节约光照能源,全世界有将近110个国家实行夏令时(DST)。中国在1992年暂停实行夏令时。在实行夏令时的国家中,美国现行的夏令时是在每年3月的第2个星期日的凌晨2:00时至11月的第1个星期日凌晨2:00时。在夏令时期间,时钟将拨快1小时;夏令时结束,时钟拨回1小时。当使用Pandas的DateOffset对象执行时间的算术运算时,运算过程会对时区敏感的Timestamp对象自动关注是否存在夏令时的转变期,并对相应的时间做出调整。stamp=pd.Timestamp(2019-3-10 1:30,tz=US/Eastern)#时区敏感的时间戳对象Timestamp(201

12、9-03-10 01:30:00-0500,tz=US/Eastern)stamp+pd.tseries.offsets.Hour()#夏令时开始,自动拨快1小时Timestamp(2019-03-10 03:30:00-0400,tz=US/Eastern)stamp=pd.Timestamp(2019-11-3 00:30,tz=US/Eastern)#时间戳对象,时区敏感Timestamp(2019-11-03 00:30:00-0400,tz=US/Eastern)stamp+2*pd.tseries.offsets.Hour()#夏令时结束,自动回拨1小时Timestamp(2019

13、-11-03 01:30:00-0500,tz=US/Eastern)04不同时区之间的运算不同时区之间的运算如果两个时间序列的时区不同,在将它们合并到一起时,最终结果中时区则采用UTC。这是因为时间戳值总是以UTC形式存储的,所以在运算时并不需要进行任何时区的转换。dti=pd.date_range(2019-3-7 8:30,periods=10,freq=B)#频率为每工作日 ts=pd.Series(np.random.randn(len(dti),index=dti)#生成时间序列 ts1=ts:7.tz_localize(Europe/London)#时区为Europe/Londo

14、n ts2=ts12:.tz_convert(Europe/Moscow)#时区为Europe/Moscow result=ts1+ts2#合并运算 result.indexDatetimeIndex(2019-03-07 08:30:00+00:00,2019-03-08 08:30:00+00:00,2019-03-11 08:30:00+00:00,2019-03-12 08:30:00+00:00,2019-03-13 08:30:00+00:00,2019-03-14 08:30:00+00:00,2019-03-15 08:30:00+00:00,dtype=datetime64n

15、s,UTC,freq=B)05时间差的运算时间差的运算时间差运算-时间序列使用Timedelta可以实现时间的平移,也支持以时间差为数据的Series和DataFrame对象的各种运算。例如,直接对两个时间序列进行相减,从而得出一个Timedelta。s=pd.Series(pd.date_range(2019-1-1,periods=3,freq=D)#时间戳序列 td=pd.Series(pd.Timedelta(days=i)for i in range(3)#时间差序列 df=pd.DataFrame(A:s,B:td);df#DataFrame对象中的数据为时间序列 A B02019

16、-01-010 days12019-01-021 days22019-01-032 days dfC=dfA+dfB;df#datetime类型与timedelta类型数据相加 A B C02019-01-010 days 2019-01-0112019-01-021 days2019-01-0322019-01-032 days 2019-01-05时间差的运算时间差运算-datetime类型对datetime类型的数据而言,也可以进行与时间差相关的运算。import datetime#导入标准模块 s-datetime.datetime(2018,1,1,3,5)#两个datetime类型

17、的数据相减0 364 days 20:55:001 365 days 20:55:002 366 days 20:55:00dtype:timedelta64ns s+pd.offsets.Minute(5)#datetime类型数据与DateOffset对象相加0 2019-01-01 00:05:001 2019-01-02 00:05:002 2019-01-03 00:05:00dtype:datetime64ns谢谢大家在日期时间的数据处理中,会涉及时区敏感的问题,应该在日期时间的数据处理中,会涉及时区敏感的问题,应该如何正确转换和处理?如何正确转换和处理?什么情况下会用到时间差?时间差的主要作用是什么?什么情况下会用到时间差?时间差的主要作用是什么?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁