Je viens de réaliser un "comportement différent" de la fonction .loc en accédant à des dataframes avec un format datetimeindex différent.

Compte tenu des 2 dataframes ci-dessous:

df1
datetimeindex  value
2020-10-01     50.1
2020-10-02     50.2
2020-10-03     50.3
2020-10-04     50.4
2020-10-05     50.5
2020-10-06     50.6
2020-10-07     50.7


df2
datetimeindex            value
2020-10-01 09:45:07      50.1
2020-10-02 09:45:07      50.2
2020-10-03 09:45:07      50.3
2020-10-04 09:45:07      50.4
2020-10-05 09:45:07      50.5
2020-10-06 09:45:07      50.6
2020-10-07 09:45:07      50.7
2020-10-08 09:45:07      50.8

Si j'applique maintenant la fonction .loc avec exactement la même entrée, j'obtiens des résultats différents.

sdate = date(2020, 10, 1)
edate = date(2020, 10, 5)

df1.loc[sdate:edate]
datetimeindex  value
2020-10-01     50.1
2020-10-02     50.2
2020-10-03     50.3
2020-10-04     50.4
2020-10-05     50.5

df2.loc[sdate:edate]
df2
datetimeindex            value
2020-10-01 09:45:07      50.1
2020-10-02 09:45:07      50.2
2020-10-03 09:45:07      50.3
2020-10-04 09:45:07      50.4

Je crois que ce comportement est dû au fait que date(2020, 10, 5) sera traité comme 2020-10-05 00:00:00 et que la 2020-10-05 ligne de df2 semble être exclue.

Actuellement, je m’aide en utilisant timedelta pour df2. J'accède donc à df2 avec df2.loc[sdate:(edate + timedelta(days=1))].

Je me demande s'il existe un moyen plus élégant de compenser ce comportement ou si je me trompe complètement de toute façon.

Je vous remercie!

0
snky1337 13 mars 2021 à 13:55

1 réponse

Meilleure réponse

Vous avez raison sur ce comportement datetime. Vous pouvez résoudre ce problème en utilisant {{X0} } sur df2:

df2.index = df2.index.round('D')
0
RJ Adriaansen 13 mars 2021 à 14:04