2016-11-02 4 views
1

ich die Analyse der CSV-Datei und in diese meine erste Spalte des Datetime im Format „2016-09-15T00: 00: 13“ und ich möchte dieses Format Standard-Python-Datetime object.I ändern kann das ändern Format für ein, aber Datum, aber für die ganze Spalte kann ich das nicht tun.Wie das Datumsformat der gesamten Spalte ändern?

Mein Code, ich verwende:

import numpy 
import dateutil.parser 
mydate = dateutil.parser.parse(numpy.mydata[1:,0]) 
print(mydate) 

ich die Störung erhalte:

'module' object has no attribute 'mydata'

Hier ist die Spalte, für die ich das Format geändert werden soll.

print(mydata[1:,0]) 

['2016-09-15T00:00:13' 

'2016-09-15T00:00:38' 

'2016-09-15T00:00:53' 

..., 

'2016-09-15T23:59:28' 

'2016-09-15T23:59:37' 

'2016-09-15T23:59:52'] 
+1

Hat du 'pandas' Daten-Frames Versuchen Sie sich mit? –

+0

Schauen Sie sich die Spalte 'np.datetime64' an. – hpaulj

Antwort

1
from datetime import datetime 

for date in mydata: 
    date_object = datetime.strptime(date, '%Y-%m-%dT%H:%M:%S') 

Hier a link der Methode Ich verwende. Derselbe Link listet auch die Formatargumente auf.

Oh und über die

'module' object has no attribute 'mydata'

Sie rufen numpy.mydata, die einen Verweis auf die „mydata“ Attribut des numpy Modul Sie importiert. Das Problem ist, ist, dass „mydata“ nur eine Ihrer Variablen ist, nicht etwas enthalten mit numpy.

0

Vorausgesetzt, dass Sie mit diesem Attribut numpy.mydata[1:,0] Fehler behandelt habe

Ihre Daten wie folgt aussieht:

In [268]: mydata=['2016-09-15T00:00:13' , 
    ...: '2016-09-15T00:00:38' , 
    ...: '2016-09-15T00:00:53' , 
    ...: '2016-09-15T23:59:28' , 
    ...: '2016-09-15T23:59:37' , 
    ...: '2016-09-15T23:59:52'] 

oder in Array es bilden, ist ein ld Array von Strings

In [269]: mydata=np.array(mydata) 
In [270]: mydata 
Out[270]: 
array(['2016-09-15T00:00:13', '2016-09-15T00:00:38', '2016-09-15T00:00:53', 
     '2016-09-15T23:59:28', '2016-09-15T23:59:37', '2016-09-15T23:59:52'], 
     dtype='<U19') 

numpy hat eine Version von datetime, die als 64-Bit-float speichern und kann numerisch verwendet werden. Ihre Reisedaten leicht zu, dass konvertieren mit astype (Ihr Format ist Standard):

In [271]: mydata.astype(np.datetime64) 
Out[271]: 
array(['2016-09-15T00:00:13', '2016-09-15T00:00:38', '2016-09-15T00:00:53', 
     '2016-09-15T23:59:28', '2016-09-15T23:59:37', '2016-09-15T23:59:52'], 
     dtype='datetime64[s]') 

tolist wandelt dieses Array in eine Liste - und die Termine zu datetime Objekte:

In [274]: D.tolist() 
Out[274]: 
[datetime.datetime(2016, 9, 15, 0, 0, 13), 
datetime.datetime(2016, 9, 15, 0, 0, 38), 
datetime.datetime(2016, 9, 15, 0, 0, 53), 
datetime.datetime(2016, 9, 15, 23, 59, 28), 
datetime.datetime(2016, 9, 15, 23, 59, 37), 
datetime.datetime(2016, 9, 15, 23, 59, 52)] 

die zurückgedreht werden könnte in ein Array von dtype Objekt:

In [275]: np.array(D.tolist()) 
Out[275]: 
array([datetime.datetime(2016, 9, 15, 0, 0, 13), 
     datetime.datetime(2016, 9, 15, 0, 0, 38), 
     datetime.datetime(2016, 9, 15, 0, 0, 53), 
     datetime.datetime(2016, 9, 15, 23, 59, 28), 
     datetime.datetime(2016, 9, 15, 23, 59, 37), 
     datetime.datetime(2016, 9, 15, 23, 59, 52)], dtype=object) 

Diese Objekte konnten nicht in Array-Berechnungen verwendet werden. Die Liste wäre genauso nützlich.

Wenn Ihr Zeichenfolgenformat nicht Standard ist, müssen Sie den datetime Parser in einem Listenverständnis verwenden, wie @staples zeigt.

1

Sofern Sie einen zwingenden Grund, es zu vermeiden haben, Pandas ist der Weg, mit dieser Art von Analyse zu gehen. Sie können einfach tun

import pandas 
df = pandas.read_csv('myfile.csv', parse_dates=True) 

Dies wird davon ausgehen, die erste Spalte ist die Indexspalte und analysieren Daten in ihm. Das ist wahrscheinlich das, was du willst.

Verwandte Themen