2014-11-05 28 views
60

Ho un campo in un DataFrame panda importato come formato stringa. Dovrebbe essere una variabile datetime. Come convertirlo in una colonna datetime e quindi filtrare in base alla data.Converti colonna di Pandas in DateTime

Esempio:

  • dataframe Nome: RAW_DATA Nome
  • Colonna: Mycol
  • Valore Formato nella colonna: '05SEP2014: 00: 00: 00.000'

risposta

134

Utilizzare to_datetime f untion, specificando un format per abbinare i vostri dati.

raw_data['Mycol'] = pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f') 
+11

Nota: l'argomento 'format' non è richiesto. 'to_datetime' è intelligente. Vai avanti e provalo senza cercare di abbinare i tuoi dati. – samthebrand

+0

Per evitare 'SettingWithCopyWarning' usa @ darth-behfans https://stackoverflow.com/a/42773096/4487805 –

+0

Cosa succede se vuoi solo il tempo e non la data? – FaCoffee

23

È possibile utilizzare il metodo dataframe .apply() per operare sui valori in Mycol:

>>> df = pd.DataFrame(['05SEP2014:00:00:00.000'],columns=['Mycol']) 
>>> df 
        Mycol 
0 05SEP2014:00:00:00.000 
>>> import datetime as dt 
>>> df['Mycol'] = df['Mycol'].apply(lambda x: 
            dt.datetime.strptime(x,'%d%b%Y:%H:%M:%S.%f')) 
>>> df 
     Mycol 
0 2014-09-05 
+0

Grazie! Questo è bello perché è più applicabile, ma l'altra risposta è stata più diretta. Ho avuto difficoltà a decidere quale mi è piaciuto di più :) – Chris

+0

Mi piace questa risposta meglio, perché produce un oggetto datetime invece di un oggetto pandas.tslib.Timestamp – wesanyer

5
raw_data['Mycol'] = pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f') 

opere, ma il risultato e 'un avvertimento Python di Un valore sta cercando di impostare su una copia di una sezione da un DataFrame. Provare a utilizzare .loc[row_indexer,col_indexer] = value invece

Direi che questo è dovuto a un po 'di indicizzazione concatenamento.