Bonjour voici mon code pour créer une variable 'attente' dans le cours 'nettoyer votre jeu de donées".
import datetime as dt
# Selection du sous-échantillon
courses = data[data.categ == "COURSES"]
# On trie les opérations par date
courses = courses.sort_values("date_operation")
# On ramène les montants en positif
courses["montant"] = -courses["montant"]
# calcul de la variable attente
r = []
last_date = dt.datetime.now()
for i,row in courses.iterrows():
days = (row["date_operation"]-last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
courses["attente"] = r
courses = courses.iloc[1:,]
# on regroupe les opérations qui ont été effectués à la même date
# (courses réalisées le même jour mais dans 2 magasins différents)
a = courses.groupby("date_operation")["montant"].sum()
b = courses.groupby("date_operation")["attente"].first()
courses = pd.DataFrame({"montant":a, "attente":b})
---------------------------------------------------------------------------TypeError Traceback (most recent call last)
<ipython-input-111-e83bdac1c1d1> in <module> 14 last_date = dt.datetime.now() 15for i,row in courses.iterrows():---> 16days =(row["date_operation"]-last_date).days
17if days ==0: 18 r.append(r[-1])TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime'
quelqu'un pourrait-il m'aider à résoudre cette erreur.
Y'a-t-il un rapport entre le fait que les valeurs de ma colonne 'date_operation' sont au format '2019-05-03'
Je ne pense pas que ça est un rapport. Ton erreur vient du fait que l'opération row["date_operation"]-last_date n'a pas de sens puisque row["date_operation"] est une chaîne tandis que last_date est de type date. Il faurdait que tu convertisses cette chaîne en son équivalent temporel via un objet de type date.
Peux-tu m'indiquer comment coder cette conversion?
Difficilement puisque tu ne dis quel format cela a. Si c'est qq chose du genre '2019-05-03' comme indiqué plus haut, tu split sur '-' et tu construis l'objet date correspondant (tu as le jour, le mois et l'année).
Mais ensuite je ne vois pas trop comment utiliser split pour convertir en date. Il faut utiliser timestamp?
C'est un peu galère le cours donne le code tel quel sans aucune explication....
J'essaye de rechercher sur internet comment faire mais je ne vois pas trop. J'ai rajouté la ligne 2 mais message d'erreur ...
for i,row in courses.iterrows():
data['date_operation'] = dt.datetime.strptime(data(row['date_operation']), '%Y-%m-%d')
days = (row['date_operation']-last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
courses["attente"] = r
courses = courses.iloc[1:,]
TypeError Traceback (most recent call last)
<ipython-input-183-b8f0e6abbb5c> in <module> 14 last_date = dt.datetime.now() 15for i,row in courses.iterrows():---> 16data['date_operation']= dt.datetime.strptime(data(row['date_operation']),'%Y-%m-%d') 17 days =(row['date_operation']-last_date).days
18if days ==0:TypeError: 'DataFrame' object is not callable
Comment est ce que je peux utiliser la fonction split et ensuite dire que le premiere caractère est l'année, le 2ème le mois, et le troisième le jour...?
Merci
- Edité par RaphaëlBitoun 11 novembre 2019 à 18:16:35
Comment est ce que je peux utiliser la fonction split et ensuite dire que le premiere caractère est l'année, le 2ème le mois, et le troisième le jour...?
Utilisez votre interpréteur
In [1]: date = '2019-11-12'
In [2]: year, month, day = date.split('-')
In [3]: year
Out[3]: '2019'
In [4]: month
Out[4]: '11'
In [5]: day
Out[5]: '12'
Mais je pense que vous pouvez accéder à ces informations avec l'objet datetime.date...
- Edité par fred1599 11 novembre 2019 à 18:53:21
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
fred vous a montré la méthode pour le faire à la main. J'ai l'impression que votre format est même extractible directement via la méthode de classe fromisoformat (sous Python 3.7)
- Edité par PascalOrtiz 11 novembre 2019 à 19:06:53
Se sont les bases, prenez le temps avec des boucles simples en python, et pourrez vous appuyez sur ces bases pour l'appliquer par la suite.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
OK je vois mais par contre pour le mettre dans ma boucle et qu'ensuite la ligne
days = (row['date_operation']-last_date).days
soit bonne je ne vois pas trop....
Pour ce qui est de fromisoformat il faudrait que je code
dt.fromisoformat(row['date_operation'])
en première ligne de ma boucle ?
- Edité par RaphaëlBitoun il y a 29 minutes
Tu convertis row['date_operation'] en un objet de type date soit à la main comme fred a commencé à t'expliquer soit en faisant date.fromisoformat(row['date_operation']) si tu es sous Python >= 3.7. Tu obtiens alors madate et il te suffit de changer row['date_operation'] par madate dans ta boucle.
Qu'est ce que vous voulez dire par "convertir a la main"?
j'essaye de suivre votre méthode avec madate :
# calcul de la variable attente
r = []
last_date = dt.datetime.now()
for i,row in courses.iterrows():
ma_date=dt.date.fromisoformat(row['date_operation'])
days = (ma_date-last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
---------------------------------------------------------------------------TypeError Traceback (most recent call last)
<ipython-input-16-945ae25a9688> in <module> 15for i,row in courses.iterrows(): 16 ma_date=dt.date.fromisoformat(row['date_operation'])---> 17days =(ma_date-last_date).days
18if days ==0: 19 r.append(r[-1])TypeError: unsupported operand type(s) for -: 'datetime.date' and 'datetime.datetime
J'essaie de corriger pour qu'il y ait bien dt.datetime pour 'last_date' et 'days' je reviens à mon erreur.
last_date = dt.datetime.now()
for i,row in courses.iterrows():
ma_date=dt.datetime.fromisoformat(row['date_operation'])
days = (ma_date-last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
courses["attente"] = r
courses = courses.iloc[1:,]
---------------------------------------------------------------------------TypeError Traceback (most recent call last)
<ipython-input-17-89b210a81e88> in <module> 15for i,row in courses.iterrows(): 16 ma_date=dt.datetime.fromisoformat(row['date_operation'])---> 17days =(ma_date-last_date).days
18if days ==0: 19 r.append(r[-1])TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'str'
Le contraire pour pour avoir datetime.date de deux cotés...
last_date = dt.date.now()
for i,row in courses.iterrows():
ma_date=dt.date.fromisoformat(row['date_operation'])
days = (ma_date-last_date).days
---------------------------------------------------------------------------AttributeError Traceback (most recent call last)
<ipython-input-22-dc5ec4867e77> in <module> 12# calcul de la variable attente 13 r =[]---> 14last_date = dt.date.now() 15for i,row in courses.iterrows(): 16 ma_date=dt.date.fromisoformat(row['date_operation'])AttributeError: type object 'datetime.date' has no attribute 'now'
last_date = dt.date.today()
for i,row in courses.iterrows():
ma_date=dt.date.fromisoformat(row['date_operation'])
days = (ma_date-last_date).days
if days == 0:
r.append(r[-1])
---------------------------------------------------------------------------TypeError Traceback (most recent call last)
<ipython-input-23-679fffe108a0> in <module> 15for i,row in courses.iterrows(): 16 ma_date=dt.date.fromisoformat(row['date_operation'])---> 17days =(ma_date-last_date).days
18if days ==0: 19 r.append(r[-1])TypeError: unsupported operand type(s) for -: 'datetime.date' and 'str'
Est ce que j'ai bien codé ce dont tu me parles avec 'madate' où je suis à côté??
Et dans le message d'erreur TypeError: unsupported operand type(s) for -: 'datetime.date' and 'str'
est ce que datetime.date correspond à ma_date et str à last_date, c'est dans l'ordre de valeurs dans la parenthèse?
Merci pour vos message, c'est pas évident d'apprendre à distance
J'ai également essayé avec .strptime
last_date = dt.datetime.today()
for i,row in courses.iterrows():
ma_date=dt.datetime.strptime(row['date_operation'],'-')
days = (ma_date-last_date).days
if days == 0:
r.append(r[-1])
---------------------------------------------------------------------------ValueError Traceback (most recent call last)
<ipython-input-33-f63ac334cd54> in <module> 14 last_date = dt.datetime.today() 15for i,row in courses.iterrows():---> 16ma_date=dt.datetime.strptime(row['date_operation'],'-') 17 days =(ma_date-last_date).days
18if days ==0:~\Anaconda3\lib\_strptime.py in _strptime_datetime(cls, data_string, format) 575 """Return a class cls instance based on the input string and the
576 format string."""
--> 577tt, fraction, gmtoff_fraction = _strptime(data_string, format) 578 tzname, gmtoff = tt[-2:] 579 args = tt[:6]+(fraction,)~\Anaconda3\lib\_strptime.py in _strptime(data_string, format) 357ifnot found: 358 raise ValueError("time data %r does not match format %r" %
--> 359 (data_string, format)) 360if len(data_string)!= found.end(): 361 raise ValueError("unconverted data remains: %s" %
ValueError: time data '2019-05-15' does not match format '-'
- Edité par RaphaëlBitoun 11 novembre 2019 à 20:41:40
Je comprends ton code mais j'ai un peu du mal à le retranscrire dans ma boucle .
# calcul de la variable attente
r = []
last_date = (dt.date.today())
for i,row in courses.iterrows():
my_date=dt.date.fromisoformat(row['date_operation'])
days= (my_date - last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
---------------------------------------------------------------------------TypeError Traceback (most recent call last)
<ipython-input-7-ede5161aa617> in <module> 15for i,row in courses.iterrows(): 16 my_date=dt.date.fromisoformat(row['date_operation'])---> 17days=(my_date - last_date).days
18if days ==0: 19 r.append(r[-1])TypeError: unsupported operand type(s) for -: 'datetime.date' and 'str'
J'ai du louper quelque chose mais je ne vois pas trop...
# calcul de la variable attente
r = []
last_date = (dt.date.today())
for i,row in courses.iterrows():
date_string = (row['date_operation'])
my_date=dt.date.fromisoformat(date_string)
days= (my_date - last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
courses["attente"] = r
courses = courses.iloc[1:,]
---------------------------------------------------------------------------TypeError Traceback (most recent call last)
<ipython-input-21-e9e3066f0fd5> in <module> 16 date_string =(row['date_operation']) 17 my_date=dt.date.fromisoformat(date_string)---> 18days=(my_date - last_date).days
19if days ==0: 20 r.append(r[-1])TypeError: unsupported operand type(s) for -: 'datetime.date' and 'str'
- Edité par RaphaëlBitoun 13 novembre 2019 à 15:09:06
Fait un print(row['date_operation']) et regarde si ça respecte bien la forme de chaîne que demande fromisoformat dans la doc ?
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt
data=pd.read_csv('C:/Users/Barbara/Desktop/Raph/MOOC/nettoyer_jeu_donnees/operations_enrichies.csv')
# Selection du sous-échantillon
courses = data[data.categ == "COURSES"]
# On trie les opérations par date
courses = courses.sort_values("date_operation")
# On ramène les montants en positif
courses["montant"] = -courses["montant"]
for i,row in courses.iterrows():
print(row['date_operation'])
La chaîne indiquée dans l'erreur vient en fait de ta ligne 11.
EDIT : Je fais allusion à ça :
# calcul de la variable attente
r = []
last_date = (dt.date.today())
for i,row in courses.iterrows():
my_date=dt.date.fromisoformat(row['date_operation'])
days= (my_date - last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
- Edité par PascalOrtiz 13 novembre 2019 à 16:46:22
Ah effectivement je l'ai enlevé de la boucle et cela fonctionne bien
import datetime as dt
# Selection du sous-échantillon
courses = data[data.categ == "COURSES"]
# On trie les opérations par date
courses = courses.sort_values("date_operation")
# On ramène les montants en positif
courses["montant"] = -courses["montant"]
# calcul de la variable attente
r = []
last_date = (dt.date.today())
for i,row in courses.iterrows():
date_string = (row['date_operation'])
my_date=dt.date.fromisoformat(date_string)
days= (my_date - last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
courses["attente"] = r
courses = courses.iloc[1:,]
# on regroupe les opérations qui ont été effectués à la même date
# (courses réalisées le même jour mais dans 2 magasins différents)
a = courses.groupby("date_operation")["montant"].sum()
b = courses.groupby("date_operation")["attente"].first()
courses = pd.DataFrame({"montant":a, "attente":b})
courses
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Découverte Python Doc Tkinter Les chaînes de caractères
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères