我有以下数据框
f26,f27,f28,f29,f30,f31,f32
2018-03-11 03:00:00-04:00,36.0,21,0.00,55,11.5,310
2018-03-11 01:00:00-04:00,36.0,21,0.00,54,12.7,320
2018-03-11 00:00:00-05:00,37.0,20,0.00,50,12.7,310
2018-03-10 23:00:00-05:00,37.0,19,0.00,48,15.0,310
2018-03-10 22:00:00-05:00,38.0,20,0.00,48,16.1,320
,当我尝试将f26
转换为日期时间时,由于某种原因它失败了。
我怀疑这与字符串末尾的时区有关。但是我不确定该如何处理。我不预先知道我将以什么时间格式接收,并且我有数百个不同的数据集。
我正在执行以下操作:
key = "f26"
df[key] = pd.to_datetime(df[key])
我以为熊猫会认识到如何处理不同的日期时间格式,但是显然它失败了,我不确定如何处理。
错误:Tz-aware datetime.datetime cannot be converted to datetime64 unless utc=True
因此,如果我添加utc = True,它将起作用。我当前的解决方案是尝试不使用utc进行转换,如果我捕获到异常,请尝试utc。 我不确定是否有更好的解决方案以及如何在没有一堆try-except块的情况下捕获所有可能的格式,因为我有许多具有多种格式的表。
答案 0 :(得分:0)
尝试以下方法:
>>> from dateutil.parser import parse
>>> df[key].apply(lambda x: parse(x))
答案 1 :(得分:0)
这是我的示例代码:
input_data = {
'f26': ['2018-03-10 22:00:00-05:00', '2018-03-10 22:00:00-05:00', '2018-03-10 22:00:00-05:00']
}
df = pd.DataFrame(data=input_data)
key = "f26"
df[key] = pd.to_datetime(df[key])
我能够成功运行它。请提供您的错误消息或更新您的示例代码,以便我们重现该错误。
答案 2 :(得分:0)
以下解决方案对我有用:
df['local_date'] = pd.to_datetime(df['hour'], infer_datetime_format=True, utc=True )
df['local_date'] = df['local_date'].dt.tz_localize('UTC')
很显然,这些方法可以串联,但为了便于阅读而分开。
在pandas 0.19中的引用