Penso che ci potrebbe essere uno sforzo più consolidato in una risposta per spiegare meglio la relazione tra il modulo datetime di Python, gli oggetti datetime64 / timedelta64 di numpy e gli oggetti Timestamp / Timedelta di Panda.
La libreria standard datetime di Python
La libreria standard datetime ha quattro oggetti principali
- tempo - solo tempo, misurato in ore, minuti, secondi e microsecondi
- data - solo anno, mese e giorno
- datetime - Tutti i componenti di ora e data
- timedelta - Una quantità di tempo con unità massima di giorni
Crea questi quattro oggetti
>>> import datetime
>>> datetime.time(hour=4, minute=3, second=10, microsecond=7199)
datetime.time(4, 3, 10, 7199)
>>> datetime.date(year=2017, month=10, day=24)
datetime.date(2017, 10, 24)
>>> datetime.datetime(year=2017, month=10, day=24, hour=4, minute=3, second=10, microsecond=7199)
datetime.datetime(2017, 10, 24, 4, 3, 10, 7199)
>>> datetime.timedelta(days=3, minutes = 55)
datetime.timedelta(3, 3300)
>>> # add timedelta to datetime
>>> datetime.timedelta(days=3, minutes = 55) + \
datetime.datetime(year=2017, month=10, day=24, hour=4, minute=3, second=10, microsecond=7199)
datetime.datetime(2017, 10, 27, 4, 58, 10, 7199)
Oggetti datetime64 e timedelta64 di NumPy
NumPy non ha oggetti separati di data e ora, solo un singolo oggetto datetime64 per rappresentare un singolo momento nel tempo. L'oggetto datetime del modulo datetime ha una precisione di microsecondi (un milionesimo di secondo). L'oggetto datetime64 di NumPy ti consente di impostare la sua precisione dalle ore fino agli attosecondi (10 ^ -18). Il costruttore è più flessibile e può accettare una varietà di input.
Costruisci gli oggetti datetime64 e timedelta64 di NumPy
Passa un numero intero con una stringa per le unità. Vedi tutte le unità qui . Viene convertito in tante unità dopo l'epoca UNIX: 1 gennaio 1970
>>> np.datetime64(5, 'ns')
numpy.datetime64('1970-01-01T00:00:00.000000005')
>>> np.datetime64(1508887504, 's')
numpy.datetime64('2017-10-24T23:25:04')
Puoi anche usare le stringhe purché siano nel formato ISO 8601.
>>> np.datetime64('2017-10-24')
numpy.datetime64('2017-10-24')
I Timedeltas hanno una singola unità
>>> np.timedelta64(5, 'D') # 5 days
>>> np.timedelta64(10, 'h') 10 hours
Puoi anche crearli sottraendo due oggetti datetime64
>>> np.datetime64('2017-10-24T05:30:45.67') - np.datetime64('2017-10-22T12:35:40.123')
numpy.timedelta64(147305547,'ms')
Pandas Timestamp e Timedelta offrono molte più funzionalità su NumPy
Un panda Timestamp è un momento nel tempo molto simile a un datetime ma con molte più funzionalità. Puoi costruirli con pd.Timestamp
o pd.to_datetime
.
>>> pd.Timestamp(1239.1238934) #defautls to nanoseconds
Timestamp('1970-01-01 00:00:00.000001239')
>>> pd.Timestamp(1239.1238934, unit='D') # change units
Timestamp('1973-05-24 02:58:24.355200')
>>> pd.Timestamp('2017-10-24 05') # partial strings work
Timestamp('2017-10-24 05:00:00')
pd.to_datetime
funziona in modo molto simile (con alcune altre opzioni) e può convertire un elenco di stringhe in timestamp.
>>> pd.to_datetime('2017-10-24 05')
Timestamp('2017-10-24 05:00:00')
>>> pd.to_datetime(['2017-1-1', '2017-1-2'])
DatetimeIndex(['2017-01-01', '2017-01-02'], dtype='datetime64[ns]', freq=None)
Conversione di Python datetime in datetime64 e Timestamp
>>> dt = datetime.datetime(year=2017, month=10, day=24, hour=4,
minute=3, second=10, microsecond=7199)
>>> np.datetime64(dt)
numpy.datetime64('2017-10-24T04:03:10.007199')
>>> pd.Timestamp(dt) # or pd.to_datetime(dt)
Timestamp('2017-10-24 04:03:10.007199')
Conversione numpy datetime64 in datetime e Timestamp
>>> dt64 = np.datetime64('2017-10-24 05:34:20.123456')
>>> unix_epoch = np.datetime64(0, 's')
>>> one_second = np.timedelta64(1, 's')
>>> seconds_since_epoch = (dt64 - unix_epoch) / one_second
>>> seconds_since_epoch
1508823260.123456
>>> datetime.datetime.utcfromtimestamp(seconds_since_epoch)
>>> datetime.datetime(2017, 10, 24, 5, 34, 20, 123456)
Converti in data e ora
>>> pd.Timestamp(dt64)
Timestamp('2017-10-24 05:34:20.123456')
Converti da Timestamp a datetime e datetime64
Questo è abbastanza facile poiché i timestamp dei panda sono molto potenti
>>> ts = pd.Timestamp('2017-10-24 04:24:33.654321')
>>> ts.to_pydatetime() # Python's datetime
datetime.datetime(2017, 10, 24, 4, 24, 33, 654321)
>>> ts.to_datetime64()
numpy.datetime64('2017-10-24T04:24:33.654321000')
numpy
,pandas
le versioni.