Ich denke, man könnte sich in einer Antwort mehr anstrengen, um die Beziehung zwischen dem datetime-Modul von Python, datetime64/timedelta64 von Numpy und den Timestamp/Timedelta-Objekten von Pandas besser zu erklären.
Die datetime-Standardbibliothek von Python
Die datetime-Standardbibliothek hat vier Hauptobjekte
- Zeit - nur Zeit, gemessen in Stunden, Minuten, Sekunden und Mikrosekunden
- Datum - nur Jahr, Monat und Tag
- datetime - Alle Komponenten von Zeit und Datum
- timedelta - Eine Zeitspanne mit einer maximalen Einheit von Tagen
Erstellen Sie diese vier Objekte
>>> 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)
NumPy's datetime64 und timedelta64 Objekte
NumPy hat keine separaten Datums- und Zeitobjekte, sondern nur ein einziges datetime64-Objekt, das einen einzelnen Zeitpunkt darstellt. Das datetime-Objekt des datetime-Moduls hat eine Genauigkeit von einer Mikrosekunde (ein Millionstel einer Sekunde). Mit dem datetime64-Objekt von NumPy können Sie die Genauigkeit von Stunden bis hin zu Attosekunden (10 ^ -18) einstellen. Sein Konstruktor ist flexibler und kann eine Vielzahl von Eingaben verarbeiten.
Konstruieren Sie die NumPy-Objekte datetime64 und timedelta64
Übergeben Sie eine Ganzzahl mit einer Zeichenkette für die Einheiten. Siehe alle Einheiten hier . Sie wird nach der UNIX-Epoche in so viele Einheiten umgerechnet: 1. Januar 1970
>>> np.datetime64(5, 'ns')
numpy.datetime64('1970-01-01T00:00:00.000000005')
>>> np.datetime64(1508887504, 's')
numpy.datetime64('2017-10-24T23:25:04')
Sie können auch Zeichenketten verwenden, solange sie im ISO 8601-Format vorliegen.
>>> np.datetime64('2017-10-24')
numpy.datetime64('2017-10-24')
Timedeltas haben eine einzige Einheit
>>> np.timedelta64(5, 'D') # 5 days
>>> np.timedelta64(10, 'h') 10 hours
Sie können auch durch Subtraktion zweier datetime64-Objekte erstellt werden
>>> np.datetime64('2017-10-24T05:30:45.67') - np.datetime64('2017-10-22T12:35:40.123')
numpy.timedelta64(147305547,'ms')
Pandas Timestamp und Timedelta bauen viel mehr Funktionalität auf NumPy auf
Ein Pandas Timestamp ist ein Moment in der Zeit, der einer Datetime sehr ähnlich ist, aber viel mehr Funktionalität hat. Sie können sie entweder mit pd.Timestamp
o pd.to_datetime
.
>>> pd.Timestamp(1239.1238934) #defaults 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
funktioniert sehr ähnlich (mit ein paar mehr Optionen) und kann eine Liste von Zeichenketten in Zeitstempel umwandeln.
>>> 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)
Konvertierung von Python datetime in datetime64 und 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')
Konvertierung von numpy datetime64 in datetime und 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)
In Zeitstempel umwandeln
>>> pd.Timestamp(dt64)
Timestamp('2017-10-24 05:34:20.123456')
Konvertierung von Timestamp in datetime und datetime64
Dies ist recht einfach, da Pandas Zeitstempel sehr leistungsfähig sind
>>> 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')