1
votes

Les résultats datetime des pandas sont différents après soustraction

J'ai un morceau de code simple suivant:

pd.to_datetime("2020-05-03 19:12:36.508889914") + pd.to_timedelta("00:00:02.897746"))
# Result = 2020-05-03 19:12:39.406635914

On dirait que ce résultat est un peu coupé.

pd.to_timedelta(
  pd.to_datetime("2020-05-03 19:12:39.406636238") - pd.to_datetime("2020-05-03 19:12:36.508889914")
  )
)
# Result = 00:00:02.897746 

2020-05-03 19: 12: 39.406636238! = 2020-05-03 19: 12: 39.406635914

Pourquoi les résultats sont-ils différents? Puis-je contrôler les chiffres après la virgule pour timedelta?


0 commentaires

3 Réponses :


1
votes

essayez ceci:

td = pd.to_timedelta(pd.to_datetime("2020-05-03 19:12:39.406636238") - pd.to_datetime("2020-05-03 19:12:36.508889914"))

print(pd.to_datetime("2020-05-03 19:12:36.508889914") + td)

Le résultat de la deuxième instruction est 2020-05-03 19: 12: 39.406636238 , ce qui est exact. Lorsque vous effectuez une soustraction dans la première ligne, il y a plus de points décimaux, mais cela ne s'affiche pas dans la sortie. Ainsi, lorsque vous copiez et collez le résultat de la première instruction dans la deuxième instruction, vous perdez une certaine précision.


0 commentaires

1
votes

Les résultats sont différents car dans le premier cas il y a plus de précision, ce n'est tout simplement pas affiché. Vous pouvez voir cela si vous regardez le total_seconds

pd.to_timedelta(pd.to_datetime("2020-05-03 19:12:39.406636238")
                - pd.to_datetime("2020-05-03 19:12:36.508889914")).total_seconds()
#2.897746324

pd.to_timedelta("00:00:02.897746").total_seconds()
#2.897746


0 commentaires

2
votes

pandas datetime n'est précis qu'à nanosecondes

bien que ce ne soit qu'un problème de formatage d'affichage, les calculs sous-jacents ne devraient pas être différents

Voyez, le résultat par vous-même

x = pd.to_timedelta(
  pd.to_datetime("2020-05-03 19:12:39.406636238") - pd.to_datetime("2020-05-03 19:12:36.508889914") , unit='N'
  )
pd.to_datetime("2020-05-03 19:12:36.508889914") + x
# Result =Timestamp('2020-05-03 19:12:39.406636238') which matches with inital datetime 


0 commentaires