在numpy(Python)中将日期时间字符串转换为日期时间

16

我希望你可以进行转换

['17-10-2010 07:15:30', '13-05-2011 08:20:35', "15-01-2013 09:09:09"]

转换为 Numpy 的日期时间对象。

import numpy as np
[np.datetime64(x) for x in ['17-10-2010 07:15:30', '13-05-2011 08:20:35', "15-01-2013 09:09:09"]] 

出现了ValueError: Could not convert object to NumPy datetime错误。然而,以下内容按照我预期的方式工作。

[np.datetime64(x) for x in ['2010-10-17 07:15:30', '2011-05-13 08:20:35', "2012-01-15 09:09:09"]] 

我该如何将我的数组转换为符合Numpydatetime64函数要求的格式?

我正在使用Python 3.4中的Numpy版本1.7.0。

2个回答

21
据我所知,np.datetime64 只能与以下格式的字符串配合使用:

ISO 8601日期或日期时间格式中的字符串

pandas 中的 to_datetime 函数似乎更加灵活:
import pandas as pd
a=pd.to_datetime(['17-10-2010 07:15:30', '13-05-2011 08:20:35', "15-01-2013 09:09:09"])

当然,您可以轻松地转换回 numpy:
np.array(a,dtype=np.datetime64)

1
np.array(a,dtype=np.datetime64) 很好,但它返回的是 '17-10-2010T07:15:30',如何将其变为 '17-10-2010 07:15:30'? - Lisa
“pandas中的to_datetime函数似乎更加灵活”,但在这种情况下,请注意pandas中的日期/时间问题 - mins

2
`np.datetime64` 使用格式 `yyyy-mm-dd hh:mm:ss`。
如果您有一个包含5-6个元素的列表,您可以通过更改日期的格式(`format(yyyy-mm-dd hh:mm:ss)`)来直接使用 `np.datetime64` 数据类型。
例如:
dates=['17-10-2010 07:15:30', '13-05-2011 08:20:35', "15-01-2013 09:09:09"]
#to
dates=['2010-10-17 07:15:30', '2011-05-13 08:20:35', "2013-01-15 09:09:09"]
#then create an array by
np.array(dates,dtype=np.datetime64)

注意:在实际数据中,将 5-6 个元素放在列表中并不是理想的情况,因此您必须使用 pandas 中的 to_datetime() 方法,因为它更灵活和高效:
除了 @atomh33ls 给出的答案之外:
pandas 中使用 to_datetime() 方法后,您可以通过使用 values 属性或 to_numpy() 方法轻松将其转换回 numpy
a.values
#OR
a.to_numpy()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接