使用pandas to_datetime转换字符串为Datetime时如何保留原始时间?
解决pandas转换带时区字符串时时间偏移的问题
嘿,这个问题我之前也碰到过!咱们先搞清楚为啥会出现时间增加5小时的情况:
你的时间字符串"2016-09-21 08:56:29-05:00"里包含了时区偏移信息(-05:00,表示比UTC时间晚5小时),但你调用pd.to_datetime时指定的format='%Y-%m-%d %H:%M:%S'并没有包含时区的格式符,所以pandas会忽略这个偏移信息,自动把解析后的时间转换为UTC时间——也就是把原时间加上5小时,这就导致最终结果和你想要的原始时间不一致了。
下面给你两种可行的解决方案:
方案一:正确解析时区信息,按需保留本地时间
这种方法会先完整解析带时区的时间,之后可以选择保留时区或者转换成无时区的本地时间:
import pandas as pd # 解析时加入时区格式符%z,正确识别偏移信息 t = pd.to_datetime("2016-09-21 08:56:29-05:00", format='%Y-%m-%d %H:%M:%S%z') print(t) # 输出:Timestamp('2016-09-21 08:56:29-0500', tz='pytz.FixedOffset(-300)') # 如果需要去掉时区信息,保留原始的本地时间 t_local = t.tz_localize(None) print(t_local) # 输出:Timestamp('2016-09-21 08:56:29')
方案二:直接截取不带时区的字符串部分转换
如果你确定不需要时区信息,也可以直接截取字符串中前19位(也就是不带-05:00的部分)再转换:
import pandas as pd time_str = "2016-09-21 08:56:29-05:00" # 截取到时区偏移前的部分 t = pd.to_datetime(time_str[:-6], format='%Y-%m-%d %H:%M:%S') print(t) # 输出:Timestamp('2016-09-21 08:56:29')
内容的提问来源于stack exchange,提问作者EJSuh
相关产品推荐
相关产品推荐

