这个时间在不同的情况下,可能有些差异
先说pandas下面的Series,可能是时间类型(该时间类型为pandas下的,跟python的datetime下的不是同种类型),但带有时区,一般为了后续方便统一换成相同时区或没有时区的
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pandas as pd # 创建一个带有时区信息的 Series s = pd.Series(pd.date_range( '2022-01-01 00:00:00' , periods = 3 , freq = 'H' , tz = 'Asia/Shanghai' )) # 将 Series 转换为不带时区信息的 Series s_without_tz = s.dt.tz_localize( None ) print ( '带有时区信息的 Series:' ) print (s) print ( '\n不带时区信息的 Series:' ) print (s_without_tz) |
否则可能报错:代码中报错Can only use .dt accessor with datetimelike values
如果不处理时区问题,可能提示:can't compare offset-naive and offset-aware datetimes
判断有没有时区,一个是datetime下的,一个是pandas下面的
1 2 3 4 5 6 7 8 9 10 | from datetime import datetime, timezone, timedelta # 创建带有时区信息的日期时间对象 dt_with_tz = datetime( 2022 , 4 , 25 , 12 , 0 , 0 , tzinfo = timezone(timedelta(hours = 8 ))) # 判断日期时间对象是否具有时区信息 if dt_with_tz.tzinfo is not None : print ( 'dt_with_tz has timezone information' ) else : print ( 'dt_with_tz does not have timezone information' ) |
1 2 3 4 5 6 7 8 9 10 | import pandas as pd # 创建带有时区信息的日期时间对象 dt_with_tz = pd.Timestamp( '2022-04-25 12:00:00' , tz = 'Asia/Shanghai' ) # 判断日期时间对象是否具有时区信息 if dt_with_tz.dt.tz is not None : print ( 'dt_with_tz has timezone information' ) else : print ( 'dt_with_tz does not have timezone information' ) |
去掉时区,也分pandas和datetime
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pandas as pd # 创建一个带有时区信息的 DataFrame df = pd.DataFrame({ 'timestamp' : pd.date_range( '2022-04-25 12:00:00' , periods = 3 , tz = 'Asia/Shanghai' )}) # 显示带有时区信息的时间列 print (df[ 'timestamp' ]) # 将时间列中的时区信息去掉 df[ 'timestamp' ] = df[ 'timestamp' ].dt.tz_localize( None ) # 显示去掉时区信息后的时间列 print (df[ 'timestamp' ]) |
1 2 3 4 5 6 7 8 9 10 | import datetime # 创建一个带有时区信息的 datetime 对象 dt_with_tz = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours = 8 ))) # 将带有时区信息的 datetime 对象转换为没有时区信息的对象 dt_without_tz = dt_with_tz.astimezone(datetime.timezone.utc).replace(tzinfo = None ) print (dt_with_tz) # 输出: 2022-05-07 13:28:15.183422+08:00 print (dt_without_tz) # 输出: 2022-05-07 05:28:15.183422 |
实际上,不是简单直接去掉时区,如果时区不同,可能还要把时间加上去,下面是个例子把pd中的内容更新示例
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pandas as pd # 创建一个 DataFrame df = pd.DataFrame({ 'col1' : [ 1 , 2 , 3 , 4 , 5 ]}) # 查看 col1 列的值 print (df[ 'col1' ]) # 输出: 1 2 3 4 5 # 对 col1 列的所有值都加上 1 df[ 'col1' ] = df[ 'col1' ]. apply ( lambda x: x + 1 ) # 查看加法计算后的结果 print (df[ 'col1' ]) # 输出: 2 3 4 5 6 |
在更新之前要获取tzinfo中的时差,然后加上去即可
1 2 3 4 5 | import datetime dt = datetime.datetime.now(datetime.timezone.utc) tz_offset = dt.tzinfo.utcoffset( None ) print (tz_offset) # 输出:0:00:00 |
大概是这样
1 | data1[ "eob" ] = data1[ "eob" ]. apply ( lambda x: x.astimezone(timezone.utc).replace(tzinfo = None ) if (x.tzinfo.utcoffset( None ) = = None ) else (x + x.tzinfo.utcoffset( None )).astimezone(timezone.utc).replace(tzinfo = None ) ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现