Es ist besser, pd.tseries.offsets.DateOffset .__ mul__
nicht zu verwenden.
pandas bietet eine Klasse namens "pd.Timestamp" an, um Datums- und Uhrzeitangaben zu verarbeiten. Wenn Sie ein Datum und eine Uhrzeit berechnen möchten, die einen bestimmten Zeitraum von einem bestimmten Datum und einer bestimmten Uhrzeit entfernt sind, verwenden Sie "pd.tseries.offsets.DateOffset".
Dieses Mal werde ich das interessante Verhalten von pd.tseries.offsets.DateOffset
vorstellen.
Schauen Sie sich zunächst das unten stehende Ausführungsergebnis an.
$ python -m timeit -u msec -n 10 -s "import pandas as pd" "pd.Timestamp('2010-01-01 00:00:00') + 100 * pd.tseries.offsets.DateOffset(seconds=1)"
10 loops, best of 3: 0.438 msec per loop
$ python -m timeit -u msec -n 10 -s "import pandas as pd" "pd.Timestamp('2010-01-01 00:00:00') + 1000 * pd.tseries.offsets.DateOffset(seconds=1)"
10 loops, best of 3: 3.85 msec per loop
$ python -m timeit -u msec -n 10 -s "import pandas as pd" "pd.Timestamp('2010-01-01 00:00:00') + 10000 * pd.tseries.offsets.DateOffset(seconds=1)"
10 loops, best of 3: 41.9 msec per loop
Weißt du was du meinst? ** Die Ausführungszeit erhöht sich linear durch Multiplikation des Datumsversatzes. ** ** ** Wahrscheinlich wird es intern so oft aufgerufen, wie "pd.Timestamp .__ add__" multipliziert wird.
Dies ist ein guter Weg, um das Gleiche zu tun.
$ python -m timeit -u msec -n 10 -s "import pandas as pd" "pd.Timestamp('2010-01-01 00:00:00') + pd.tseries.offsets.DateOffset(seconds=1*100)"
10 loops, best of 3: 0.0328 msec per loop
$ python -m timeit -u msec -n 10 -s "import pandas as pd" "pd.Timestamp('2010-01-01 00:00:00') + pd.tseries.offsets.DateOffset(seconds=1*1000)"
10 loops, best of 3: 0.0373 msec per loop
$ python -m timeit -u msec -n 10 -s "import pandas as pd" "pd.Timestamp('2010-01-01 00:00:00') + pd.tseries.offsets.DateOffset(seconds=1*10000)"
10 loops, best of 3: 0.0336 msec per loop
Es wurde hohe Geschwindigkeit (oder eher intuitives Verhalten).
Übrigens, wenn Sie das Python-Standardmodul datetime verwenden, wird es so sein. Es ist sehr schnell.
$ python -m timeit -u msec -n 10 -s "import datetime" "datetime.datetime(2010,1,1) + 100 * datetime.timedelta(seconds=1)"
10 loops, best of 3: 0.0031 msec per loop
$ python -m timeit -u msec -n 10 -s "import datetime" "datetime.datetime(2010,1,1) + 1000 * datetime.timedelta(seconds=1)"
10 loops, best of 3: 0.00276 msec per loop
$ python -m timeit -u msec -n 10 -s "import datetime" "datetime.datetime(2010,1,1) + 10000 * datetime.timedelta(seconds=1)"
10 loops, best of 3: 0.00227 msec per loop
Recommended Posts