Come convertire la colonna DataFrame in data e ora in pandas

Jinku Hu 3 gennaio 2023
  1. Funzione pandas to_datetime per convertire la colonna DataFrame in datetime
  2. Metodo apply DataFrame per convertire la colonna DataFrame in Datatime
  3. Metodi per convertire i DataFrame da colonna a data e ora di confronto delle prestazioni
Come convertire la colonna DataFrame in data e ora in pandas

Introdurremo dei metodi per convertire la colonna DataFrame Pandas DataFrame in Python datetime.

  • Funzione to_datetime() di Pandas
  • Metodo DataFrame apply per operare sugli elementi in colonna

Useremo lo stesso DataFrame qui sotto in questo articolo.

>>> from datetime import datetime, timedelta
>>> from pandas import DataFrame
>>> df = DataFrame.from_items(
    [('Alfa', [1, 2, 3]), 
     ('Bravo', [4, 5, 6]), 
     ('Datetime', [datetime.strftime(datetime.now()-timedelta(days=_), "%m/%d/%Y, %H:%M:%S") for _ in range(3)])], 
    orient='index', 
    columns=['A', 'B', 'C']).T
>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55

Funzione pandas to_datetime per convertire la colonna DataFrame in datetime

La funzione Pandas to_datetime converte l’argomento dato in datetime.

pandas.to_datetime(param, format="")

Il formato specifica lo schema della stringa datetime. È lo stesso con il formato in stftime o strptime nel modulo datetime di Python.

>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55
>>> df['Datetime'] = pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55

La funzione to_datetime() non modifica i dati DataFrame in-place, quindi dobbiamo assegnare i pandas restituiti Series alla specifica colonna DataFrame.

to_datetime() La funzione è intelligente da convertire in Datetime

La funzione to_datetime() potrebbe effettuare la conversione a datetime in modo intelligente senza dare la stringa di formato datetime. Troverà lo schema di stringa automaticamente e in modo intelligente.

>>> df['Datetime'] = pd.to_datetime(df['Datetime'])
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55
Attenzione

Anche se to_datetime potrebbe fare il suo lavoro senza dare il format in modo intelligente, la velocità di conversione è molto più bassa di quella data dal format.

Potremmo impostare l’opzione infer_datetime_format di to_datetime come True per passare la conversione in una modalità più veloce se il formato della stringa di data e ora può essere dedotto senza dare la stringa format.

Potrebbe aumentare la velocità di parsing di 5~6 volte.

Metodo apply DataFrame per convertire la colonna DataFrame in Datatime

apply(func, *args, **kwds)

Il metodo apply di DataFrame applica la funzione func ad ogni colonna o riga.

Potremmo usare la funzione lambda al posto di func per la semplicità.

>>> df['Datetime'] = df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
		   
>>> df
		   
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:44:35
B    2     5 2019-12-06 14:44:35
C    3     6 2019-12-05 14:44:35

Metodi per convertire i DataFrame da colonna a data e ora di confronto delle prestazioni

Usiamo timeit per confrontare le prestazioni di entrambi i metodi introdotti in questo articolo.

In [1]: %timeit pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
452 µs ± 85.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [2]: %timeit df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
377 µs ± 58.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Il metodo apply è anche leggermente migliore del metodo nativo di Pandas to_datetime, con circa l'80% del tempo di esecuzione della funzione to_datetime.

Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - Pandas DataFrame

Articolo correlato - Pandas DataFrame Column

Articolo correlato - Python DateTime