6 您所在的位置:网站首页 panada是什么意思 6

6

2024-06-29 17:02| 来源: 网络整理| 查看: 265

  通常选择使用协调世界时(UTC,又称世界统一时间、世界标准时间、国际协调时间)来处理时间序列。

  时区是以UTC偏移量的形式表示的。

  在Python中,时区信息来自第三方库pytz,Pandas包装了pytz功能。时区名可以在文档中找到,也可以用交互的方式查看。

  关于pytz模块的信息,可参考【python模块——pytz】

 

(1)查看时区

  pytz有all_timezones、common_timezones这两个属性来查看有哪些时区;

>>> import pytz >>> len(pytz.common_timezones) 440 >>> pytz.common_timezones[:5] ['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara'] >>> pytz.common_timezones[-5:] ['US/Eastern', 'US/Hawaii', 'US/Mountain', 'US/Pacific', 'UTC'] >>> len(pytz.all_timezones) 592 >>> pytz.all_timezones[:5] ['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara'] >>> pytz.all_timezones[-5:] ['UTC', 'Universal', 'W-SU', 'WET', 'Zulu']

 (2)获取时区对象

  pytz有timezone属性获取时区对象

>>> tz = pytz.timezone('Asia/Shanghai') >>> tz

 (3)查看时间序列的时区

  Pandas中的时间序列默认是naive时区,即没有时区。用index.tz方法查看时间序列的时区

>>> rng = pd.date_range('2020/8/1',periods=5,freq='D') >>> ts 2020-08-01 4 2020-08-02 8 2020-08-03 3 2020-08-04 3 2020-08-05 7 Freq: D, dtype: int32 >>> print(ts.index.tz) None

  通过参数tz可以设置时区

>>> rng2 = pd.date_range('2020/8/1',periods=5,freq='D',tz='UTC') >>> ts2 = pd.Series(np.random.randint(1,10,len(rng2)),index = rng2) >>> ts2 2020-08-01 00:00:00+00:00 8 2020-08-02 00:00:00+00:00 3 2020-08-03 00:00:00+00:00 1 2020-08-04 00:00:00+00:00 3 2020-08-05 00:00:00+00:00 2 Freq: D, dtype: int32 >>> print(ts2.index.tz) UTC

  (4)本地化和转换

  时间序列若需要和转化,必须先使用tz_localize进行时区本地化,再通过tz_convert()转换成别的时区

#先进行本地化转换到别的地区 >>> ts_utc = ts.tz_localize('UTC') >>> ts_utc.index DatetimeIndex(['2020-08-01 00:00:00+00:00', '2020-08-02 00:00:00+00:00', '2020-08-03 00:00:00+00:00', '2020-08-04 00:00:00+00:00', '2020-08-05 00:00:00+00:00'], dtype='datetime64[ns, UTC]', freq='D') #再转换到别的时区 >>> ts_utc.tz_convert('US/Eastern') 2020-07-31 20:00:00-04:00 4 2020-08-01 20:00:00-04:00 8 2020-08-02 20:00:00-04:00 3 2020-08-03 20:00:00-04:00 3 2020-08-04 20:00:00-04:00 7 Freq: D, dtype: int32

  DatetimeIndex日期索引对象也可以使用tz_localize()和tz_convert()方法

>>> ts.index = ts.index.tz_localize('Asia/Shanghai') >>> ts 2020-08-01 00:00:00+08:00 4 2020-08-02 00:00:00+08:00 8 2020-08-03 00:00:00+08:00 3 2020-08-04 00:00:00+08:00 3 2020-08-05 00:00:00+08:00 7 Freq: D, dtype: int32

  (5)操作时区意识型TimeStamp对象

  与时间序列和日期范围一样,时间戳对象也能从naive本地化为时区意识型(time zone-aware),并从一个时区转换到另一个时区

 例:创建一个时间戳本地化到世界标准时间UTC,并将时区转换为'US/Eastern'

>>> stamp = pd.Timestamp('2020-8-1 18:23:34') >>> stamp_utc = stamp.tz_localize('UTC') >>> stamp_utc Timestamp('2020-08-01 18:23:34+0000', tz='UTC') >>> stamp_utc_convert = stamp_utc.tz_convert('US/Eastern') >>> stamp_utc_convert Timestamp('2020-08-01 14:23:34-0400', tz='US/Eastern')

  注意:时区意识型对象在内部保存了一个UTC时间戳,其值在时区转换过程中是不是发生改变的,是从1970年1月1日算起的纳秒数

如:stamp_utc和stamp_utc_convert的值是一样的

>>> stamp_utc_convert.value 1596306214000000000 >>> stamp_utc.value 1596306214000000000

  (6)不同时区之间的计算

  当两个时间序列的时期不同,若需要将其合并,最后的结果将会是UTC

>>> rng = pd.date_range('2020/8/1',periods=5,freq='D') >>> rng = pd.date_range('2020/8/1 10:30',periods=5,freq='D') >>> ts = pd.Series(np.random.randint(1,10,len(rng)),index = rng) >>> ts 2020-08-01 10:30:00 8 2020-08-02 10:30:00 1 2020-08-03 10:30:00 9 2020-08-04 10:30:00 9 2020-08-05 10:30:00 3 Freq: D, dtype: int32 >>> ts1 = ts[:2].tz_localize('Europe/Zurich') >>> ts2 = ts[2:4].tz_localize('US/Arizona') >>> ts1.index DatetimeIndex(['2020-08-01 10:30:00+02:00', '2020-08-02 10:30:00+02:00'], dtype='datetime64[ns, Europe/Zurich]', freq='D') >>> result = ts1 + ts2 >>> result 2020-08-01 08:30:00+00:00 NaN 2020-08-02 08:30:00+00:00 NaN 2020-08-03 17:30:00+00:00 NaN 2020-08-04 17:30:00+00:00 NaN dtype: float64 >>> result.index DatetimeIndex(['2020-08-01 08:30:00+00:00', '2020-08-02 08:30:00+00:00', '2020-08-03 17:30:00+00:00', '2020-08-04 17:30:00+00:00'], dtype='datetime64[ns, UTC]', freq=None)

 

  



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有