无法转换为熊猫的日期时间

时间:2019-10-03 18:32:16

标签: python pandas

我有以下数据框

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块的情况下捕获所有可能的格式,因为我有许多具有多种格式的表。

3 个答案:

答案 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')

很显然,这些方法可以串联,但为了便于阅读而分开。

  • utc = True :返回 UTC DatetimeIndex ,这是允许 tz_localize()方法所必需的。
  • infer_datetime_format = True :另一个有用的参数,它试图推断日期时间字符串的格式。

pandas 0.19中的引用

相同的问题:https://stackoverflow.com/a/61642126/5985898