1
votes

ajout, soustraction de colonnes datetime.time pandas

J'ai le dataframe suivant

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

Quand j'essaye de faire ce qui suit

df['arrival_at_desination']-df['flight_departure']

Cela me donne l'erreur suivante

XXX

comment soustraire deux colonnes datetime.time?


4 commentaires

Euhmm ... la méthode .sub () peut-elle fonctionner là-dessus? As-tu essayé ?


Cela me donne exactement la même erreur lorsque j'essaye df ['Arrival_at_desination'] - df ['flight_departure']


(df ['Arrival_at_desination'] - df ['flight_departure']). astype (‌ 'timedelta64 [m]') comment ça marche?


vérifiez cette réponse, a résolu un problème similaire


3 Réponses :


2
votes

En général, il n'est pas possible de soustraire deux fois sans information de date (que faire si l'arrivée est à 1h et le départ à 23h?). Si vous pensez qu'ils sont à la même date et que l'heure d'arrivée est toujours supérieure à l'heure de départ, vous pouvez procéder comme suit. Ce n'est pas joli et j'espère que quelqu'un trouvera une meilleure réponse.

(pd.to_datetime(df.arrival_at_desination.astype(str), format='%H:%M:%S') -
    pd.to_datetime(df.flight_departure.astype(str), format='%H:%M:%S'))


1 commentaires

Merci, je ne sais pas comment, mais votre première ligne était suffisante pour la solution en fait, le seul moyen possible est d'avoir des données complètes de date et d'heure ensemble comme une valeur dans les deux colonnes, puis vous pouvez les soustraire et obtenir le résultat souhaité.



2
votes

Vous devez convertir au format datatime pour convertir essayez ceci

0   -1 days +20:00:00
1   -1 days +18:30:00

Voici ce que j'obtiens, espérons cette aide,

arrival = pd.to_datetime(df['arrival_at_desination'])
dept = pd.to_datetime(df['flight_departure'])
diff = arrival - dept

Sinon, ajoutez la date aux données, concaténez avec le temps et effectuez ce qui précède


1 commentaires

Ne fonctionne pas sur mon installation python3. TypeError: type (s) d'opérande non pris en charge pour -: 'datetime.time' et 'datetime.time'. Il faut une étape de combinaison.



0
votes

J'ai trouvé que pour que cela fonctionne (python3.68), vous devez combiner l'heure avec une date - réelle ou fausse.

import pandas as pd


df = pd.DataFrame(columns=['to','fr','ans'])

date = "1-1-01 "
tmp = pd.Series(['13:03:12','11:57:18','10:07:47'])
tm =pd.to_datetime(date+tmp, format='%d-%m-%y %H:%M:%S')

tmp = pd.Series(['13:02:12','10:57:18','10:07:22'])
tm2 =pd.to_datetime(date+tmp, format='%d-%m-%y %H:%M:%S')

df.to = tm2
df.fr = tm

(df.fr-df.to)
#if you want this as seconds -- which for my applications has been more useful.
(df.fr-df.to).astype('timedelta64[s]')


0 commentaires