Sto tentando di convertire l'indice di uno pandas.DataFrame
da un formato stringa a un indice datetime utilizzando pandas.to_datetime()
.pandas.to_datetime formato stringa orario incoerente
Importa i panda:
In [1]: import pandas as pd
In [2]: pd.__version__
Out[2]: '0.10.1'
creare un esempio dataframe:
In [3]: d = {'data' : pd.Series([1.,2.], index=['26/12/2012', '10/01/2013'])}
In [4]: df=pd.DataFrame(d)
Guarda indici. Si noti che il formato della data è giorno/mese/anno:
In [5]: df.index
Out[5]: Index([26/12/2012, 10/01/2013], dtype=object)
indice Converti in datetime:
In [6]: pd.to_datetime(df.index)
Out[6]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-12-26 00:00:00, 2013-10-01 00:00:00]
Length: 2, Freq: None, Timezone: None
Già in questa fase, si può vedere che il formato della data per ogni voce è stato formattato in modo diverso . Il primo va bene, il secondo ha scambiato mese e giorno.
Questo è quello che voglio scrivere, ma evitando la formattazione incoerente di stringhe di data:
In [7]: df.set_index(pd.to_datetime(df.index))
Out[7]:
data
2012-12-26 1
2013-10-01 2
Credo che la prima voce è corretta perché la funzione 'sa' che non ci sono 26 mesi, e così non sceglie il formato predefinito mese/giorno/anno.
C'è un altro/modo migliore per farlo? Posso passare il formato alla funzione to_datetime()
?
Grazie.
EDIT:
ho trovato un modo per fare questo, senza pandas.to_datetime:
import datetime.datetime as dt
date_string_list = df.index.tolist()
datetime_list = [ dt.strptime(date_string_list[x], '%d/%m/%Y') for x in range(len(date_string_list)) ]
df.index=datetime_list
ma è un po 'confuso. Qualsiasi miglioramento benvenuto.
Grazie @andy. L'argomento "dayfirst" funziona. Ma non posso usare 'format'. 'TypeError: to_datetime() ha ottenuto un argomento di parole chiave inaspettate 'format''. Dovrebbe essere disponibile nella versione panda che sto usando (0.10.1)? –
@ random.me ah Scusa. Non lo sarà, stavo lavorando in dev (quindi sarà 0.11)! –
Grazie, questo è stato utile. Sto lavorando alla versione 0.15 e i panda si confondono ancora se non inserisco il parametro 'dayfirst = True', quindi l'introduzione di' format' chiaramente non ha aiutato. – Rhubarb