Python calcul d'une durée de connexion à partir de 2 col
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je dois calculer un temps de connexion pour chaque personne à partir de 2 colonnes d'un DataFrame.
Pour cela j'ai écris le code suivant:
#importation des packages nécessaires au calcul des durées
import datetime
from datetime import timedelta
#Analyse de la variable du temps de connexion
#Step_1 stockage des données dans 2 variables: time_1 et time_2
time_1 = transactions['signup_time']
print(time_1.head())
time_2 = transactions['purchase_time']
print(time_2.head())
#calcul des durées de connexion entre signup_time et purchase_time
#calcul de la durée de connexion à partir de la différence entre time_1 et time_2
myDateTime1 = datetime.datetime(time_1)
myDateTime2 = datetime.datetime(time_2)
delta_time = myDateTime2 - myDateTime1
#ajouter une colonne dans le dataframe pour la durée de connexion
transactions.insert("connected_time", valeurs)
transactions.head()
Cependant je reçois le message d'erreur suivant:
TypeError Traceback (most recent call last) /var/folders/8l/ntsj_13s12x97qhbjly0xdkr0000gn/T/ipykernel_17005/4095553184.py in <module> 14 #calcul de la durée de connexion à partir de la différence entre time_1 et time_2 15 datetime.timedelta ---> 16 myDateTime1 = datetime.datetime(time_1) 17 myDateTime2 = datetime.datetime(time_2) 18 delta_time = myDateTime2 - myDateTime1 ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/series.py in wrapper(self) 183 if len(self) == 1: 184 return converter(self.iloc[0]) --> 185 raise TypeError(f"cannot convert the series to {converter}") 186 187 wrapper.__name__ = f"__{converter.__name__}__" TypeError: cannot convert the series to <class 'int'>
Du coup, manquant d'expérience en langage Python, je pensais que le format:
2015-02-24 22:55:49
était adapté aux calculs avec datetime et timedelta
Si quelqu'un pouvait m'aider à avancer
En vous remerciant par avance
- Python calcul d'une durée de connexion à partir de 2 col
- Gmail connexion - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Calcul moyenne excel - Guide
- Créer une vidéo à partir de photos - Guide
9 réponses
bonjour,
il serait préférable de partager un exemple que nous puissions tester.
Peux-tu ajouter
print (type(time_1), time_1)
Que contiendra "valeurs"?
suggestion:
def td(x): f="%Y-%m-%d %H:%M:%S" return datetime.datetime.strptime(x['purchase_time'],f)- \ datetime.datetime.strptime(x['signup_time'],f) transactions["connected_time"].apply(td,axis=1)
Merci pour tes réponses et suggestions,
Valeurs est initialement destiné à enregistrer(sous la forme d'une colonne d'un DataFrame) les valeurs issues de la différence entre signup_time et purchase_time.
En suivant ta suggestion j'obtiens le message suivant:
KeyError: 'connected_time'
Je pense qu'il faut que je définisse 'connecter_time' en amont
En fait signup_time et purchase_time sont dtype: object
Il serait préférable de partager un exemple complet, simplifié, que nous puissions tester.
Tu ne précises même pas ce qu'est précisément "transactions".
exemple:
import pandas as pd import datetime def td(x): f="%Y-%m-%d %H:%M:%S" return datetime.datetime.strptime(x['purchase_time'],f)- \ datetime.datetime.strptime(x['signup_time'],f) t="2015-02-24 22:55:49" transactions = pd.DataFrame({'purchase_time': [t,t,t],'signup_time': [t,t,t]}) print(transactions) transactions['c3'] = transactions.apply(td,axis=1) print(transactions)
Merci pour ta réponse. transactions est un DataFrame issu d'un fichier csv
Voici une partie des données
user_id signup_time purchase_time purchase_value device_id source browser sex age ip_address
22058 2015-02-24 22:55:49 2015-04-18 2:47:11 34 QVPSPJUOCKZAR SEO Chrome M 39 732758368.8
333320 2015-06-07 20:39:50 2015-06-08 1:38:54 16 EOGFQPIZPYXFZ Ads Chrome F 53 350311387.9
1359 2015-01-01 18:52:44 2015-01-01 18:52:45 15 YSSKYOSJHPPLJ SEO Opera M 53 2621473820.0
150084 2015-04-28 21:13:25 2015-05-04 13:54:50 44 ATGTXKYKUDUQN SEO Safari M 41 3840542444.0
221365 2015-07-21 7:09:52 2015-09-09 18:40:53 39 NAUITBZFJKHWW Ads Safari M 45 415583117.5
159135 2015-05-21 6:03:03 2015-07-09 8:05:14 42 ALEYXFXINSXLZ Ads Chrome M 18 2809315200.0
50116 2015-08-01 22:40:52 2015-08-27 3:37:57 11 IWKVZHJOCLPUR Ads Chrome F 19 3987484329.0
360585 2015-04-06 7:35:45 2015-05-25 17:21:14 27 HPUCUYLMJBYFW Ads Opera M 34 1692458728.0
159045 2015-04-21 23:38:34 2015-06-02 14:01:54 30 ILXYDOZIHOOHT SEO IE F 43 3719094257.0
182338 2015-01-25 17:49:49 2015-03-23 23:05:42 62 NRFFPPHZYFUVC Ads IE M 31 341674739.6
199700 2015-07-11 18:26:54 2015-10-28 21:59:40 13 TEPSJVVXGNTYR Ads Safari F 35 1819008578.0
73884 2015-05-29 16:22:02 2015-06-16 5:45:58 58 ZTZZJUCRDOCJZ Direct Chrome M 32 4038284553.0
79203 2015-06-16 21:19:35 2015-06-21 3:29:59 18 IBPNKSMCKUZWD SEO Safari M 33 4161540927.0
299320 2015-03-03 19:17:07 2015-04-05 12:32:36 50 RMKQNVEWGTWPC Direct Safari M 38 3178510015.0
82931 2015-02-16 2:50:30 2015-04-16 0:56:47 15 XKIFNYUZMBWFU SEO IE M 24 4203487754.0
31383 2015-02-01 1:06:17 2015-03-24 10:17:58 58 UNUAVQXNWFBMO SEO Safari F 24 995732779.0
78986 2015-05-15 3:52:08 2015-08-11 2:29:47 57 TGHVAWBMZRDHH SEO FireFox M 23 3503883392.0
119824 2015-03-20 0:31:27 2015-04-05 7:31:46 55 WFIIFCPIOGMHT Ads Safari M 38 131423.789
357386 2015-02-03 0:48:38 2015-03-24 18:27:23 40 NWSVDOHYIOBDR Ads FireFox M 24 3037372279.0
289172 2015-07-17 5:48:45 2015-11-12 22:08:11 46 KFZGQIWDIRLZB Direct FireFox F 53 1044590098.0
154699 2015-07-08 15:35:44 2015-07-20 0:11:52 24 TYZPZLEWNJJRI Direct FireFox F 23 3847612074.0
316355 2015-08-08 20:05:50 2015-10-03 2:21:46 47 IHGECNGZGQOAZ SEO Chrome M 28 3836794299.0
343378 2015-01-30 8:50:29 2015-04-22 15:11:45 47 VOMVNRHNBLLMI SEO Chrome F 24 1008390841.0
370338 2015-01-08 11:47:29 2015-03-29 20:46:44 25 QLMZBEDPYFUXT Ads IE M 34 3442657972.0
171711 2015-01-11 1:51:15 2015-01-11 1:51:16 52 YPLQGKBAAULUV Direct IE F 35 1120619336.0
59780 2015-01-04 22:32:33 2015-01-16 1:13:43 31 WUMOBGUCBOXPO SEO FireFox M 36 1752166824.0
176129 2015-01-28 12:53:51 2015-01-29 23:21:43 37 XUNJIVTRXCRZL Ads IE M 32 745823926.8
100886 2015-07-12 14:14:04 2015-07-29 7:41:26 54 GIREUSMFWWUZJ SEO Chrome F 28 1799140971.0
221257 2015-05-29 17:55:17 2015-09-05 22:42:38 12 LGFXOENGXOBXI SEO IE M 19 698700037.4
151705 2015-01-07 3:44:53 2015-01-07 3:44:54 48 URHCRIXOMLJMH SEO Chrome F 27 2836025221.0
399610 2015-04-03 20:06:51 2015-06-01 7:42:42 30 CLTWKVSGDCFRD SEO FireFox F 39 287463049.3
396746 2015-08-05 23:50:35 2015-08-14 12:08:55 56 JUWCOHMHRBDCL SEO IE M 56 2937613755.0
243817 2015-02-13 18:16:05 2015-04-23 17:44:27 72 YIIEFBZUGEXNR Direct Chrome F 32 2521870760.0
262245 2015-01-03 3:29:05 2015-02-26 23:23:55 38 YAQQIDVLQRBLL Ads IE F 21 2803457087.0
256743 2015-06-12 19:11:32 2015-07-11 6:42:08 33 VVZIVFUBISCEV SEO IE M 22 2260745439.0
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionAh OK, voici la première version que j'avais tapé:
import pandas as pd import datetime from datetime import timedelta #Analyse de la variable du temps de connexion #stockage des données dans 2 variables: time_1 et time_2 time_1 = transactions['signup_time'] print(time_1.head()) time_2 = transactions['purchase_time'] print(time_2.head()) print (type(time_1), time_1) #calcul des durées de connexion entre signup_time et purchase_time #calcul de la durée de connexion à partir de la différence entre time_1 et time_2 myDateTime1 = datetime.datetime(time_1) myDateTime2 = datetime.datetime(time_2) delta_time = myDateTime2 - myDateTime1 #ajouter une colonne dans le dataframe pour la durée de connexion transactions.insert("connected_time", valeurs) transactions.head()
Bonjour,
En fait transactions est chargé de la manière suivante:
transactions = pd.read_csv(‘transactions’)
c’est la ligne manquante.
en te remerciant
Bonjour
merci de lire et appliquer ceci https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Bonjour,
import pandas as pd import datetime transactions = pd.read_csv('LEFICHIER.csv', delimiter=' ', engine='python') values= [] dt_format = '%Y-%m-%d %H:%M:%S' for i in range(len(transactions)): t1 = transactions['signup_time'][i] t2 = transactions['purchase_time'][i] dt1 = datetime.datetime.strptime(t1, dt_format) dt2 = datetime.datetime.strptime(t2, dt_format) values.append(dt2 - dt1) transactions.insert(column="connected_time", value=values, loc=len(transactions.columns)) print(transactions.head())
Il y a peut-être une autre façon de parcourir les lignes avec panda plutôt qu'un range + len, à voir.
Purée, il craint ce nouveau système ccm...
et ainsi?
import pandas as pd import datetime def td(x): f="%Y-%m-%d %H%M%S" return datetime.datetime.strptime(x['purchase_time'],f)- \ datetime.datetime.strptime(x['signup_time'],f) transactions = pd.read_csv("transactions",delimiter=' ', engine='python') transactions["connected_time"] = transactions.apply(td,axis=1) print(transactions)
EDIT: j'ai du changer le format de date, suite à des soucis de couper/coller.
Je ne comprends pas d'où venait le soucis "Key Error" du 9 juil. 2022 à 22:19.