这个时间在不同的情况下,可能有些差异
先说pandas下面的Series,可能是时间类型(该时间类型为pandas下的,跟python的datetime下的不是同种类型),但带有时区,一般为了后续方便统一换成相同时区或没有时区的
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下面的
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')
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
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'])
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中的内容更新示例
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中的时差,然后加上去即可
import datetime dt = datetime.datetime.now(datetime.timezone.utc) tz_offset = dt.tzinfo.utcoffset(None) print(tz_offset) # 输出:0:00:00
大概是这样
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) )