Affichage d'un graphique avec matplotlib [Résolu]

Signaler
Messages postés
30
Date d'inscription
lundi 5 avril 2021
Statut
Membre
Dernière intervention
6 avril 2021
-
Messages postés
29702
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 avril 2021
-
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.

6 réponses

Messages postés
14989
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 avril 2021
823
bonjour,
peux-tu partager ton fichier csv?
Messages postés
30
Date d'inscription
lundi 5 avril 2021
Statut
Membre
Dernière intervention
6 avril 2021
4
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
Messages postés
29702
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 avril 2021
7 066
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
.
Messages postés
30
Date d'inscription
lundi 5 avril 2021
Statut
Membre
Dernière intervention
6 avril 2021
4
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 ...
Messages postés
29702
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 avril 2021
7 066
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
Messages postés
30
Date d'inscription
lundi 5 avril 2021
Statut
Membre
Dernière intervention
6 avril 2021
4
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.
Messages postés
29702
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 avril 2021
7 066
De rien, bonne continuation !