3 votes

La soustraction de lignes par Pandas donne un résultat erroné

Mon dataframe pandas est constitué d'une colonne "timeStamp", dont les éléments sont de type datetime.datetime. J'essaie d'obtenir la différence entre deux lignes consécutives de cette colonne pour obtenir le temps passé en secondes. J'utilise pour cela le morceau de code suivant.

df["Time"] = df["timeStamp"].diff(0).dt.total_seconds()

En général, cela fonctionne bien, mais je continue à obtenir 0.0 comme résultat de cette opération dans un certain nombre de cas, même lorsque ce n'est pas le cas.

Exemples de valeurs qui donnent 0,0 :

import pandas as pd
import datetime
import numpy as np

df = pd.DataFrame({'S.No.': [1, 2, 3, 4], 'ABC': [datetime.datetime(2019,2,25,11,49,50), datetime.datetime(2019,2,25,11,50,0),datetime.datetime(2019,2,25,11,50,7),datetime.datetime(2019,2,25,11,50,12)]})

df["Time"] = df["ABC"].diff(0).dt.seconds

print df

Remarque : utilisation de python2.7

2voto

Jondiedoop Points 2996

Utilisez

df["Time"] = df["timeStamp"].diff().dt.total_seconds()

à la place.

L'argument dans diff spécifie le nombre de lignes au-dessus de la ligne avec laquelle vous voulez calculer la différence. Maintenant, vous le remplissez avec 0, donc vous soustrayez une valeur de lui-même, ce qui donnera toujours 0. En le laissant vide, il utilise la valeur par défaut 1, donc la différence avec 1 ligne au-dessus.

2voto

anky_91 Points 26311

Essayez ça :

print(df["timestamp"].diff().fillna(0).dt.seconds)

0     0
1    10
2     7
3     5

df['difference']=df["timestamp"].diff().fillna(0).dt.seconds
print(df)

            timestamp  difference
0 2019-02-25 11:49:50           0
1 2019-02-25 11:50:00          10
2 2019-02-25 11:50:07           7
3 2019-02-25 11:50:12           5

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X