时区处理 2019/1/16

1.pytz和dateutil库-对时区的支持:

    1) DST 夏令时2) UTC 协调世界时3) 时区是以UTC的偏移量的形式表示的# 1.1查看时区名称
import pytz,dateutil
pytz.common_timezones
'''[...,'Asia/Shanghai',...] '''#Dateutil时区字符串与pytz 时区区别开始dateutil/# 1.2构造时区对象
tz_pytz =pytz.timezone('Asia/Shanghai') #<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
tz_dateutil = dateutil.tz.gettz('Asia/Shanghai')# tzfile('PRC')
tz_utc=dateutil.tz.tzutc() #构造UTC对象 # tzutc()# 1.3警告
# 跨时区库版本的时区定义可能不被视为相等。
# 用一个版本本地化用不同版本进行操作的存储数据时,可能会导致问题。

2.DatetimeIndex

# 实例2.1:设置时区
rng = pd.date_range('3/6/2019', periods=2, freq='D')
rng.tz is None#True pandas对象默认无时区rng = pd.date_range('3/6/2019', periods=2,tz='Asia/Shanghai') #提供时区pytz
rng.tz # <DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
rng_dateutil = pd.date_range('3/6/2019', periods=2, freq='D',tz='Asia/Shanghai') #提供时区dateutil
rng_dateutil.tz#<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>rng_utc = pd.date_range('3/6/2019', periods=10, freq='D', tz=dateutil.tz.tzutc()) # dateutil - utc special case
rng_utc = pd.date_range('3/6/2019', periods=10, freq='D', tz='UTC') #等价
rng_utc.tz # tzutc()rng1= pd.date_range('3/6/2019 00:00', periods=10, freq='D',tz=tz_pytz)
rng2 = pd.date_range('3/6/2019 00:00', periods=10, freq='D',tz=tz_dateutil)
rng1==rng2 #当为上海时不等;当为'Europe/London'为[...,True,...]相等

# 2.2本地化和转换

# 2.2本地化和转换
# Series/DataFrame/DatetimeIndex的 tz_localize(),tz_convert()方法# 实例2.21:无时区转本地化UTC时区
rng = pd.date_range('1/16/2019 15:14:30', periods=3, freq='D', )
ts = pd.Series([1,2,3],index= rng)
rng_utc = pd.date_range('1/16/2019 15:14:30', periods=3, tz='UTC')
ts1 = pd.Series([1,2,3],index= rng_utc)#显式构造时区对象
ts_utc = ts.tz_localize('UTC')ts
'''''''''
2019-01-16 15:14:30 1
2019-01-17 15:14:30 2
2019-01-18 15:14:30 3
Freq: D, dtype: int64
'''
ts_utc
ts1
'''''''''
2019-01-16 15:14:30+00:00 1
2019-01-17 15:14:30+00:00 2
2019-01-18 15:14:30+00:00 3
Freq: D, dtype: int64
'''
ts_utc.index
ts1.index
'''''''''
DatetimeIndex(['2019-01-16 15:14:30+00:00', '2019-01-17 15:14:30+00:00',
'2019-01-18 15:14:30+00:00'],dtype='datetime64[ns, UTC]', freq='D')
'''
# 实例2.22:将本地UTC时区转为上海时区
ts_shanghai=ts_utc.tz_convert('Asia/Shanghai')
#
2019-01-16 23:14:30+08:00 1
2019-01-17 23:14:30+08:00 2
2019-01-18 23:14:30+08:00 3
Freq: D, dtype: int64# 实例2.23:将上海时区转UTC时区
ts_utc.tz_convert('Asia/Shanghai').tz_convert('UTC')
#
2019-01-16 15:14:30+00:00 1
2019-01-17 15:14:30+00:00 2
2019-01-18 15:14:30+00:00 3
Freq: D, dtype: int64

3.时间戳

3.1.说明
# 将时区直接传递给datetime.datetime构造函数不正确,用时区上的localize方法进行本地化。
# 时间戳都以UTC格式存储
# DatetimeIndex带有时区的标量值 将其字段(日,小时,分钟)本地化为时区。

3.2实例

# 实例3.21:构造
d1=datetime.datetime(2019, 1, 16,16,14, tzinfo=pytz.timezone('Asia/Shanghai'))#添加时区
#datetime.datetime(2019, 1, 16, 16, 14, tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>)d2=pd.Timestamp('2019-1-16 1614',tz=pytz.timezone('Asia/Shanghai'))#添加时区
d2=pd.Timestamp('2019-1-16 1614',tz='Asia/Shanghai') #添加时区 等价
#Timestamp('2019-01-16 16:14:00+0800', tz='Asia/Shanghai')# 实例3.22:具有相同UTC值的时间戳被认为是相等的,即使它们位于不同的时区
idx1= ts1.index.tz_convert('US/Eastern')
idx2= ts1.index.tz_convert('Europe/Berlin')idx1[2]#Timestamp('2019-01-18 10:14:30-0500', tz='US/Eastern', freq='D')
idx2[2]#Timestamp('2019-01-18 16:14:30+0100', tz='Europe/Berlin', freq='D')idx1[2]==idx2[2]#True

# 实例3.23Timestamp本地化及转换到其他时区

# 实例3.231:本地化
d0=pd.Timestamp('2019-1-16 1614')d0.tz_localize('UTC')
#Timestamp('2019-01-16 16:14:00+0000', tz='UTC')
d0.tz_localize('Asia/Shanghai')
#Timestamp('2019-01-16 16:14:00+0800', tz='Asia/Shanghai')# 实例3.232:转换到其他时区
d0.tz_localize('Asia/Shanghai').tz_convert('UTC')
#Timestamp('2019-01-16 08:14:00+0000', tz='UTC')
idx1[2].tz_convert('Europe/Berlin')
# Timestamp('2019-01-18 16:14:30+0100', tz='Europe/Berlin')#实例:3.24
d0.value#1547655240000000000 d0为有时区的时间戳,值为自1970-1-1算起的纳秒数

4.删除时区

4.1.DatetimeIndex删除时区tztz_localize(None)将删除持有当地时间表示的时区tz_convert(None)转换为UTC时间后将删除时区

4.2实例

idx = pd.DatetimeIndex(start='2019-08-01 09:00', freq='H', periods=2, tz='US/Eastern')
'''''''''
DatetimeIndex(['2019-08-01 09:00:00-04:00', '2019-08-01 10:00:00-04:00'],
dtype='datetime64[ns, US/Eastern]', freq='H')
'''
idx.tz_localize(None)
'''''''''
DatetimeIndex(['2019-08-01 09:00:00', '2019-08-01 10:00:00'],
dtype='datetime64[ns]', freq='H')
'''
idx.tz_convert(None)
idx.tz_convert('UCT').tz_localize(None)#等价
'''''''''
DatetimeIndex(['2019-08-01 13:00:00', '2019-08-01 14:00:00' ],
dtype='datetime64[ns]', freq='H')
'''

5.tz_localize本地化时的模糊时间-夏令时

# 当存在重复时,本地化无法确定DST和非DST小时数。
# ambiguous='infer'到tz_localize将尝试确定正确的偏移量

实例5.

# 实例5.1:ambiguous='infer'自动推断
idx = pd.DatetimeIndex(['11/06/2019 00:00', '11/06/2019 01:00', '11/06/2019 01:00', '11/06/2019 02:00',])
idx.tz_localize('US/Eastern')#包含不明确的时间有可能失败,本次能够显示
idx.tz_localize('US/Eastern', ambiguous='infer')#推断模糊时间# 实例5.2:ambiguous=[bool]自动推断
# True表示DST夏令时,False表示非DST
rng_hourly_dst = np.array([1, 1, 0, 0])
idx.tz_localize('US/Eastern', ambiguous=rng_hourly_dst).tolist()idx.tz_localize('US/Eastern', ambiguous='NaT').tolist()
'''''''''
DatetimeIndex(['2019-11-06 00:00:00-05:00', '2019-11-06 01:00:00-05:00',
'2019-11-06 01:00:00-05:00', '2019-11-06 02:00:00-05:00'],
dtype='datetime64[ns, US/Eastern]', freq=None)
'''
6.转换astype(...)为时区 
# Dtypes有无时区时显示:datetime64[ns]/datetime64[ns, tz]ts = pd.Series(pd.date_range('20190101',periods=3))
ts.astype('datetime64[ns]')# make an ts tz naive
'''''''''
0 2019-01-01
1 2019-01-02
2 2019-01-03
dtype: datetime64[ns]
'''
ts.astype('datetime64[ns, US/Eastern]')# localize and convert a naive timezone
'''''''''
0 2018-12-31 19:00:00-05:00
1 2019-01-01 19:00:00-05:00
2 2019-01-02 19:00:00-05:00
dtype: datetime64[ns, US/Eastern]
'''
# convert to a new timezone
ts.astype('datetime64[ns, CET]')
'''''''''
0 2019-01-01 01:00:00+01:00
1 2019-01-02 01:00:00+01:00
2 2019-01-03 01:00:00+01:00
dtype: datetime64[ns, CET]
'''
ts.values#一旦转换为NumPy数组,这些将失去tz时区
'''''''''
array(['2019-01-01T00:00:00.000000000', '2019-01-02T00:00:00.000000000',
'2019-01-03T00:00:00.000000000'], dtype='datetime64[ns]')
''' 

53 pandas 时间序列-时区处理(tz_localize本地化tz_conver转换)(tcy)相关推荐

  1. Pandas 时间序列 - 纵览与时间戳

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 一身报国有万死,双鬓向人无再青. ...

  2. date new 转换时区_Pandas 时间序列 时区控制

    处理时区本地化导致的混淆时间本地化时不存在的时间时区序列操作 利用 pytz 与 datetuil 或标准库 datetime.timezone 对象,pandas 能以多种方式处理不同时区的时间戳. ...

  3. CC00050.python——|HadoopPython.v14|——|Arithmetic.v14|Pandas数据分析库:Pandas时间序列|

    一.时间序列 ### --- 时间戳操作~~~ # 创建⽅法 pd.Timestamp('2020-8-24 12') # 时刻数据 pd.Period('2020-8-24',freq = 'M') ...

  4. EduCoder Pandas高效化运算与时间序列处理 第3关:Pandas时间序列的高级应用

    文章目录 任务描述 相关知识 时间频率与偏移量 重新取样.迁移和窗口 重新取样 时间迁移 移动时间窗口 编程要求 测试说明 任务描述 根据相关知识完成下列任务: 求上个季度(仅含工作日)的平均值: 求 ...

  5. Pandas 时间序列 - DateOffset 对象

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 国亡身殒今何有,只留离骚在世间. ...

  6. Pandas 时间序列 - 实例方法与重采样

    呆鸟云:"数据分析就像是夜里行军,业务是灯塔,是地图,没灯塔你不知道方向,没地图你不知道该怎么走.技术是你的交通工具,你用11路,还是骑自行车,还是开跑车,交通工具越好,你实现目标的速度越快 ...

  7. Pandas时间序列 :rolling 用法快速理解

    相信初学Pandas时间序列时,会遇到rolling函数,不知道该怎么理解,对吧? 让我们用最简单的例子来说明吧. 代码如下: import pandas as pd # 导入 pandas inde ...

  8. pandas 时间序列的优化转化

    pandas 时间序列的优化转化 #!/usr/bin/env Python3 __author__ = '未昔/angelfate' __date__ = '2019/7/26 9:58' # -* ...

  9. Pandas时间序列进阶(日期范围,频率,移位,时区处理)

    日期范围 生成日期范围:pd.date_range()方法用于根据特定频率生成指定长度的DatetimeIndex pd.date_range(start=None,end=None,periods= ...

最新文章

  1. 视觉传感器:3D感知算法
  2. 基于Faster RCNN的医学图像检测(肺结节检测)
  3. 吐血整理所有常用端口,遇到端口问题一查就懂!
  4. 华为平板wps语音朗读_华为隐藏的这五大功能,个个都很实用,如果你不知道,钱就白花了...
  5. 计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)
  6. 用蒙特卡洛方法计算派-python和R语言
  7. 数据结构之自建算法库——链栈
  8. ES6使用object的is()方法比较两个值
  9. django批量修改table_django-formset实现数据表的批量操作
  10. Linux-Centos安装JDK
  11. 宋体、代码-iOS网络编程实践--NSStream实现TCP Socket iPhone客户端-by小雨
  12. 如何进行反欺诈风控模型冷启动
  13. vscode背景绿色配置
  14. 国际标准智商测试题答案
  15. 棋盘(Checkerboard)算法
  16. Spring 实战(第 5 版)
  17. 前端之HTML常用标签
  18. BZOJ 4216 Pig 分块乱搞
  19. UE4课堂笔记——《UE4C++游戏开发入门教程!》第一期开场,C++必须了解小知识
  20. Modbus TCP介绍

热门文章

  1. 微软输入法和搜狗输入法中的双拼
  2. 上海学车科目二,科目三容易扣分点分享,你了解多少
  3. TWaver三维可视化管理软件、3D和2D开发工具软件的试用(申请试用的回复邮件)
  4. 阿里云服务器地域暂时无法办理经营性ICP许可证什么意思?
  5. RPLIDAR思岚雷达学习记录--1--初识a1并跑通
  6. python怎么把ppt转成html,如何使用python把ppt转换成pdf
  7. Python中abs()与fabs()的区别
  8. 阿里云盾SSL证书即将到期怎么办?
  9. 学术规范作业——心得体会
  10. PyInstaller 的安装和使用(python生成exe文件)_联网安装