[PYTHON] pd.tseries.offsets.DateOffset peut être assez lent s'il n'est pas utilisé avec prudence

Ce que je veux dire

Il vaut mieux ne pas utiliser pd.tseries.offsets.DateOffset .__ mul__.

Contexte

pandas fournit une classe appelée pd.Timestamp pour gérer les dates et les heures. De plus, si vous voulez calculer une date et une heure éloignées d'une certaine période d'une certaine date et heure, utilisez pd.tseries.offsets.DateOffset. Cette fois, je présenterai le comportement intéressant de pd.tseries.offsets.DateOffset.

Tout d'abord, regardez le résultat de l'exécution ci-dessous.

$ 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

Tu sais ce que tu veux dire? ** Le temps d'exécution augmente linéairement en multipliant le décalage de date. ** ** Il est probablement appelé en interne autant de fois que «pd.Timestamp .__ add__» est multiplié.

C'est une bonne manière de faire la même chose.

$ 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

C'est devenu une vitesse élevée (ou plutôt un comportement intuitif).

Au fait, si vous utilisez le module standard python datetime, ce sera comme ça. C'est très rapide.

$ 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

pd.tseries.offsets.DateOffset peut être assez lent s'il n'est pas utilisé avec prudence
Jusqu'à ce que vous puissiez utiliser youtube-dl avec Synology (DS120j)
Types de fichiers pouvant être utilisés avec Go
Si "ne peut pas être utilisé lors de la création d'un objet PIE" apparaît dans make
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
Notes sur les connaissances Python utilisables avec AtCoder
SSD 1306 OLED peut être utilisé avec Raspeye + python (Remarque)
Jusqu'à ce que la géométrie de la torche ne puisse être utilisée qu'avec le processeur Windows (ou Mac)
Peut être utilisé lorsque aws-cli est disponible mais que jq n'est pas disponible jp.py
Vérifiez si mod_wsgi peut être construit
requirements.txt peut être commenté avec #
Module de traitement du signal acoustique qui peut être utilisé avec Python-Sounddevice ASIO [Application]
Optimisation mathématique pour un travail gratuit avec Python + PuLP
Python-Sound device Module de traitement du signal acoustique ASIO [Basic]
Commande Linux (édition de base) utilisable à partir d'aujourd'hui si vous connaissez
Jouer avec l'apprentissage automatique: Q-Learning peut-il déterminer si des actions liées au marketing doivent être prises?