如何从datetime列'ds'中移除时区且保留完整时间?
移除时区信息并保留日期时间的正确方法
原始ds列数据:
ds 2023-06-01 00:00:00+00:00 2023-06-01 01:00:00+00:00 2023-06-01 02:00:00+00:00 2023-06-01 03:00:00+00:00 2023-06-01 04:00:00+00:00
尝试过的错误方法
字符串截取法
代码:Usage_df_V2['ds'].astype(str).str[:-6]
错误结果:所有行小时部分被错误修改为00:00:002023-06-01 00:00:00 2023-06-01 00:00:00 2023-06-01 00:00:00 2023-06-01 00:00:00 2023-06-01 00:00:00tz_convert法
代码:Usage_df_V2['ds'].dt.tz_convert(None)
错误结果:丢失时间部分,仅保留日期2023-06-01 2023-06-01 2023-06-01 2023-06-01 2023-06-01
正确解决方法
方案1:使用dt.tz_localize(None)
如果ds列是带时区的datetime类型(如datetime64[ns, UTC]),直接用该方法移除时区,同时完整保留日期和时间:
Usage_df_V2['ds'] = Usage_df_V2['ds'].dt.tz_localize(None)
执行后结果:
2023-06-01 00:00:00 2023-06-01 01:00:00 2023-06-01 02:00:00 2023-06-01 03:00:00 2023-06-01 04:00:00
方案2:格式化输出字符串
通过指定格式将datetime转为字符串,自动剔除时区信息:
Usage_df_V2['ds'] = Usage_df_V2['ds'].dt.strftime('%Y-%m-%d %H:%M:%S')
此方法适用于需要将结果保留为字符串类型的场景。
错误原因说明
- 字符串截取失败:大概率是因为转字符串后的格式不统一,导致切片位置错误,误删了时间部分。
tz_convert(None)失败:tz_convert用于时区转换,若数据是已本地化的datetime,应使用tz_localize(None);出现日期截断可能是数据类型异常(如误转为date类型而非datetime)。
内容的提问来源于stack exchange,提问作者Lopa
相关产品推荐
相关产品推荐

