将日期时间中的dtypes对象字段转换为正确的时区panda



我从PostGre数据库加载以下Pandas DataFrame:

df
Out[162]: 
date_time    production_mw
0     2019-01-01 00:00:00+01:00  10.000000000000
1     2019-01-01 01:00:00+01:00  10.000000000000
2     2019-01-01 02:00:00+01:00  10.000000000000
3     2019-01-01 03:00:00+01:00  10.000000000000
4     2019-01-01 04:00:00+01:00  10.000000000000
...              ...
8755  2019-12-31 19:00:00+01:00  10.000000000000
8756  2019-12-31 20:00:00+01:00  10.000000000000
8757  2019-12-31 21:00:00+01:00  10.000000000000
8758  2019-12-31 22:00:00+01:00  10.000000000000
8759  2019-12-31 23:00:00+01:00  10.000000000000
[8760 rows x 2 columns]

其中

df.dtypes
Out[163]: 
date_time        object
production_mw    object
dtype: object

酷,我的愿望是将字段date_time转换为具有正确时区的datetime,在这种情况下为CET时区(+01:00(

我分两步完成

df.date_time = pd.to_datetime(df.date_time, utc=True)
df.date_time=df.date_time.dt.tz_convert('CET')

我正确地得到

df.dtypes
Out[166]: 
date_time        datetime64[ns, CET]
production_mw                 object
dtype: object

在许多情况下,我只能访问具有该格式(YYYY-MM-DD hh:MM:ss+/-偏移量(的date_time字段的数据帧df,而不知道对应的时区是什么,python有没有一种方法可以自动检测时区对应的偏移量,而无需手动设置?

我知道这不是我所要求的,但我更感兴趣的是保持hh:mm:ss与输入中的相同,而不是设置正确的时区。所以我刚刚删除了时区信息

使用命令

df['date_time']=df['date_time'].apply(lambda x: x.replace(tzinfo=None))

我得到

df
Out[199]: 
date_time    production_mw
0    2019-01-01 00:00:00  10.000000000000
1    2019-01-01 01:00:00  10.000000000000
2    2019-01-01 02:00:00  10.000000000000
3    2019-01-01 03:00:00  10.000000000000
4    2019-01-01 04:00:00  10.000000000000
...              ...
8755 2019-12-31 19:00:00  10.000000000000
8756 2019-12-31 20:00:00  10.000000000000
8757 2019-12-31 21:00:00  10.000000000000
8758 2019-12-31 22:00:00  10.000000000000
8759 2019-12-31 23:00:00  10.000000000000
[8760 rows x 2 columns]
df.dtypes
Out[200]: 
date_time        datetime64[ns]
production_mw            object
dtype: object

所以时间没有改变(我正在对太阳能发电厂进行分析,说生产高峰在午夜+6 UTC并不理想-(

我应用的解决方案在以下链接

在pandas 中提取时区信息

干杯

最新更新