Affichage d'un graphique avec matplotlib

Résolu/Fermé
Unnamed_Man Messages postés 42 Date d'inscription lundi 5 avril 2021 Statut Membre Dernière intervention 12 juin 2021 - Modifié le 6 avril 2021 à 15:09
mamiemando Messages postés 33458 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 - 6 avril 2021 à 15:39
Bonjour,

Je rencontre un problème lorsque j'exécute le script ci-dessous pour afficher un graphique et j'ai un gros message d'erreur qui apparaît mais je ne vois pas où se trouve l'erreur.

Voici le script :

import pandas
import matplotlib.pyplot as plt
iris = pandas.read_csv("iris.csv")
x = iris.loc[:,"petal_length"]  
y = iris.loc[:,"petal_width"]
lab = iris.loc[:,"species"]
plt.axis("equal")
plt.scatter(x[lab==0], y[lab==0], color='g', label="setosa")
plt.scatter(x[lab==1], y[lab==1], color='r', label="versicolor")
plt.scatter(x[lab==2], y[lab==2], color='b', label="virginica")
plt.legend()
plt.show()



Et voici l'erreur (yeux sensibles, s'abstenir ...) :

Traceback (most recent call last):
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexes\base.py", line 3080, in get_loc
return self._engine.get_loc(casted_key)
File "pandas\_libs\index.pyx", line 70, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 101, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 4554, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas\_libs\hashtable_class_helper.pxi", line 4562, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'petal_length'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\xxxxx\Desktop\Exo_KNN\iris.py", line 4, in <module>
x = iris.loc[:,"petal_length"
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexing.py", line 889, in __getitem__
return self._getitem_tuple(key)
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexing.py", line 1060, in _getitem_tuple
return self._getitem_lowerdim(tup)
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexing.py", line 807, in _getitem_lowerdim
section = self._getitem_axis(key, axis=i)
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexing.py", line 1124, in _getitem_axis
return self._get_label(key, axis=axis)
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexing.py", line 1073, in _get_label
return self.obj.xs(label, axis=axis)
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 3724, in xs
return self[key]
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\frame.py", line 3024, in __getitem__
indexer = self.columns.get_loc(key)
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexes\base.py", line 3082, in get_loc
raise KeyError(key) from err
KeyError: 'petal_length'


Je ne comprends pas vraiment toutes ces lignes mais je suppose que l'erreur se trouve lorsque j'essaie de lier mon script python avec mon fichier Excel qui contient toutes les données. J'ai bien vérifié que les noms correspondaient et que les deux fichiers étaient situés dans le même répertoire.

Quelqu'un saurait m'aider svp ? Je lui en serais énormément reconnaissant.

Cordialement.
A voir également:

6 réponses

yg_be Messages postés 23417 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 janvier 2025 Ambassadeur 1 557
6 avril 2021 à 14:50
bonjour,
peux-tu partager ton fichier csv?
0
Unnamed_Man Messages postés 42 Date d'inscription lundi 5 avril 2021 Statut Membre Dernière intervention 12 juin 2021 5
Modifié le 6 avril 2021 à 15:06
Je voudrais bien mais comment fait-on pour partager un fichier sur ce forum ? Je ne vois que l'option de partage d'images.

Sinon je peux vous envoyer vers la page de téléchargement du fichier mais le site n'est pas sécurisé.

Si vous souhaitez quand même le télécharger, le fichier s'appelle "iris.csv" et est contenu dans l'archive : http://ressource.elec.free.fr/docs/NSI/knn/knn-fichiers-eleves.zip
0
mamiemando Messages postés 33458 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 7 812
Modifié le 6 avril 2021 à 15:11
Tu peux le partager sur un site tiers e.g. pastebin. Ou sinon tu peux copier coller les premières lignes de ton fichier csv dans ton prochain message, ça devrait suffire pour comprendre l'erreur. Mais vu ton erreur,
pandas
ne comprend pas à quoi la clé
petal_length
.
0
Unnamed_Man Messages postés 42 Date d'inscription lundi 5 avril 2021 Statut Membre Dernière intervention 12 juin 2021 5
Modifié le 6 avril 2021 à 15:17
Merci à vous pour vos réponses tout d'abord.

Voici les premières lignes de mon fichier :

petal_length ; petal_width ; species
1.4;0.2;0
1.4;0.2;0
1.3;0.2;0
1.5;0.2;0
1.4;0.2;0
1.7;0.4;0
1.4;0.3;0
1.5;0.2;0


PS: Les ";" correspondent à la délimitation entre les colonnes.

@mamiemando J'ai émis la même hypothèse mais je ne trouve pas de solution ...
0
mamiemando Messages postés 33458 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 7 812
6 avril 2021 à 15:28
Bonjour,

Par défaut pandas utilise "," comme séparateur, donc tu charges mal ton csv. Cela se voit si tu affiches le contenu de ta dataframe :

import pandas
import matplotlib.pyplot as plt
iris = pandas.read_csv("iris.csv")
print(iris)


... on voit que la séparation n'est pas faite comme prévu :

 petal_length;petal_width;species
0 1.4;0.2;0
1 1.4;0.2;0
2 1.3;0.2;0
3 1.5;0.2;0
4 1.4;0.2;0
5 1.7;0.4;0
6 1.4;0.3;0
7 1.5;0.2;0


SI on précise le séparateur comme expliqué dans la documentation on aboutit à :

import pandas
import matplotlib.pyplot as plt
iris = pandas.read_csv("iris.csv", sep=";")
print(iris)


   petal_length  petal_width  species
0 1.4 0.2 0
1 1.4 0.2 0
2 1.3 0.2 0
3 1.5 0.2 0
4 1.4 0.2 0
5 1.7 0.4 0
6 1.4 0.3 0
7 1.5 0.2 0


... et du coup
iris.loc[:,"petal_length"]
marchera.

Bonne chance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Unnamed_Man Messages postés 42 Date d'inscription lundi 5 avril 2021 Statut Membre Dernière intervention 12 juin 2021 5
6 avril 2021 à 15:35
Cela fonctionne ! Je vous remercie énormément pour vos réponses et pour votre aide !

Sans vous, je crois bien que j'aurais abandonné (et pourtant c'est pas mon genre) :-)

Encore merci, bonne journée et bonne continuation à vous deux.


Cordialement.
0
mamiemando Messages postés 33458 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 7 812
6 avril 2021 à 15:39
De rien, bonne continuation !
0