Sous liste et boucle

Résolu/Fermé
Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022 - Modifié le 3 mars 2022 à 11:08
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 4 mars 2022 à 15:30
Bonjour,

J'essaie d'obtenir à partir d'un dataframe constitué de deux colonnes:
- marque de bateaux
- modèles de bateaux


de pouvoir obtenir la liste de chaque modèles en entrant simplement le nom de la marque

import pandas as pd
df = pd.read_csv("test liste.csv", sep=";")
Ultramar = df.loc[df['lib_marque'] == 'Ultramar','lib_model'].tolist()
liste_marques = df['lib_marque'].tolist()
liste_marques
mylist2 = set(liste_marques) #passage en set puis retour en liste pour ne garder que les valeurs uniques
list_marques = list(mylist2)

for x in list_marques :
df.loc[df["lib_marque" == x,'lib_model'].tolist()


mais quand j'essaie de faire une boucle j'obtiens toujours
  Input In [2]
df.loc[df["lib_marque" == x,'lib_model'].tolist()
^
SyntaxError: unexpected EOF while parsing


Une idée? Par ailleurs outre le problème de syntaxe que je n'arrive pas à résoudre, je ne sais pas si c'est le meilleur moyen de parvenir à mes fins (Classes ?) Merci d'avance pour votre aide

Configuration: Windows / Chrome 99.0.4844.51

3 réponses

yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 551
3 mars 2022 à 11:25
bonjour,
je pense que tu pourras identifier la source de l'erreur en comparant la ligne en erreur et la ligne 3.
0
Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022
3 mars 2022 à 11:54
Effectivement, le '[' était mal placé, merci pour votre réponse

for x in list_marques :
df.loc[df["lib_marque"] == x,'lib_model'].tolist()


toutefois, quand j'essaie d'entrer une des marques présentes dans la liste 'list_marques" , par exemple <Hunter>, j'obtiens ceci:

---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [17], in <module>
----> 1 Hunter

NameError: name 'Hunter' is not defined


Je pensais que le "x" faisait office de nomination pour les éléments présents dans la liste "list_marques" ?
0
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022
3 mars 2022 à 16:45
peux-tu partager le fichier csv permettant de tester ton programme?
0
Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022 > yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
3 mars 2022 à 16:51
0
Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022
3 mars 2022 à 16:50
Je ne sais pas comment mettre un fichier directement sur le forum :

https://www.transfernow.net/en/dltransfer?utm_source=20220303B9kLjPVZ
0
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551
3 mars 2022 à 17:06
bien reçu le fichier.
Je me demande si ton soucis n'est pas la méthode utilisée pour "entrer une des marques présentes".
Qu'essaies-tu d'obtenir exactement?
Ceci fonctionne bien chez moi:
import pandas as pd
df = pd.read_csv("test liste.csv", sep=";")
Ultramar = df.loc[df['lib_marque'] == 'Ultramar','lib_model'].tolist()
liste_marques = df['lib_marque'].tolist()
print(liste_marques)
mylist2 = set(liste_marques) #passage en set puis retour en liste pour ne garder que les valeurs uniques
list_marques = list(mylist2)
for x in list_marques :
    print(x,df.loc[df["lib_marque"] == x,'lib_model'].tolist())
m=input("marque?")
print(m,df.loc[df["lib_marque"] == m,'lib_model'].tolist())
0
Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022 > yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
Modifié le 3 mars 2022 à 17:15
En fait j'essaie de pouvoir obtenir par la suite , un peu comme un dictionnaire, en gros en écrivant n'importe quelle marque et obtenir en retour tous les modèles pour cette marque, dans le code que tu proposes, cela imprime l'ensemble des marques et leurs modèles


Je pense en effet que le problème est la méthode utilisée, peut être n'est ce pas une boucle for avec "x in", mais je ne vois pas quoi utiliser à la place ?
0
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022
4 mars 2022 à 11:33
As-tu entré une marque en réponse à la question que le programme pose, tout à la fin?
1
Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022 > yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
4 mars 2022 à 11:45
En fait quand j'entre ton code :

for x in list_marques :
print(x,df.loc[df["lib_marque"] == x,'lib_model'].tolist())
m=input("marque")
print(m,df.loc[df["lib_marque"] == m,'lib_model'].tolist())




J'ai la liste par défaut de toutes les marques et de tous les modèles associés qui s'affiche, et vu le nombre le programme charge en boucle et je n'arrive pas à exécuter de code ensuite.

https://www.zupimages.net/viewer.php?id=22%2F09%2F4enk.png
0
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022
4 mars 2022 à 11:49
Supprime alors la boucle for (les deux lignes).
1
Antioche75 Messages postés 15 Date d'inscription jeudi 3 mars 2022 Statut Membre Dernière intervention 8 mars 2022
4 mars 2022 à 14:55
Effectivement, merci !
0
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551
4 mars 2022 à 15:30
Peux-tu alors marquer la discussion comme résolue?
0