Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting datetime string to datetime in numpy (python)

I would like to convert

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

into a Numpy datetime object.

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"]] 

raised ValueError: Could not convert object to NumPy datetime. However, the following works as I intended

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

How can I convert my array into a format that conforms with Numpy's datetime64 function requirement?

I am using Numpy version 1.7.0. in python 3.4

like image 219
Duna Avatar asked Nov 24 '14 10:11

Duna


2 Answers

So far as I can tell, np.datetime64 only works with

strings in ISO 8601 date or datetime format

The to_datetime function in pandas seems to be more flexible:

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"])

Of course you can easily convert back to numpy:

np.array(a,dtype=np.datetime64)
like image 114
atomh33ls Avatar answered Oct 13 '22 00:10

atomh33ls


np.datetime64 works with format yyyy-mm-dd hh:mm:ss

If you have a list of 5-6 elements you can directly make use of np.datetime64 data type by just changing the format(yyyy-mm-dd hh:mm:ss) of date in your list

for example:

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)

Note: Having 5-6 elements inside list is not an ideal case(when comes to real data) so you have to use to_datetime() method in pandas as it is more flexible and efficient:

In addition to answer given by @atomh33ls:

After using to_datetime() method in pandas you can easily convert that back to numpy by using values attribute or to_numpy() method

a.values
#OR
a.to_numpy()
like image 37
Anurag Dabas Avatar answered Oct 12 '22 22:10

Anurag Dabas