Je pense qu'il pourrait y avoir un effort plus consolidé dans une réponse pour mieux expliquer la relation entre le module datetime de Python, datetime64 / timedelta64 de numpy et les objets Timestamp / Timedelta des pandas.
La bibliothèque standard datetime de Python
La bibliothèque standard datetime a quatre objets principaux
- temps - seul temps, mesuré en heures, minutes, secondes et microsecondes
- date - uniquement année, mois et jour
- datetime - Toutes les composantes de l'heure et de la date
- timedelta - Un temps avec une unité de jours maximum
Créez ces quatre objets
>>> 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)
Objets datetime64 et timedelta64 de NumPy
NumPy n'a pas d'objets de date et d'heure séparés, juste un seul objet datetime64 pour représenter un seul instant dans le temps. L'objet datetime du module datetime a une précision en microsecondes (un millionième de seconde). L'objet datetime64 de NumPy vous permet de régler sa précision des heures jusqu'à attosecondes (10 ^ -18). Son constructeur est plus flexible et peut prendre une variété d'entrées.
Construire les objets datetime64 et timedelta64 de NumPy
Passez un entier avec une chaîne pour les unités. Voir toutes les unités ici . Il est converti en autant d'unités après l'époque UNIX: 1 janvier 1970
>>> np.datetime64(5, 'ns')
numpy.datetime64('1970-01-01T00:00:00.000000005')
>>> np.datetime64(1508887504, 's')
numpy.datetime64('2017-10-24T23:25:04')
Vous pouvez également utiliser des chaînes tant qu'elles sont au format ISO 8601.
>>> np.datetime64('2017-10-24')
numpy.datetime64('2017-10-24')
Les timedeltas ont une seule unité
>>> np.timedelta64(5, 'D') # 5 days
>>> np.timedelta64(10, 'h') 10 hours
Peut également les créer en soustrayant deux objets datetime64
>>> np.datetime64('2017-10-24T05:30:45.67') - np.datetime64('2017-10-22T12:35:40.123')
numpy.timedelta64(147305547,'ms')
Pandas Timestamp et Timedelta construisent beaucoup plus de fonctionnalités en plus de NumPy
Un horodatage pandas est un moment très semblable à un datetime mais avec beaucoup plus de fonctionnalités. Vous pouvez les construire avec pd.Timestamp
ou 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
fonctionne de manière très similaire (avec quelques options supplémentaires) et peut convertir une liste de chaînes en horodatages.
>>> 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)
Conversion de datetime Python en datetime64 et 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')
Conversion de numpy datetime64 en datetime et 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)
Convertir en horodatage
>>> pd.Timestamp(dt64)
Timestamp('2017-10-24 05:34:20.123456')
Conversion de timestamp en datetime et datetime64
C'est assez facile car les horodatages pandas sont très puissants
>>> 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
, lespandas
versions.