我从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 中提取时区信息
干杯