JP,
j'avais anticipé en ayant toutes les cellules D1 nommées Genre... et là, c'est toujours le même "Expected type 'int', got 'str' instead" pour le USECOLS='D' de la ligne "df = pd.read_excel(fic, usecols='D')"
Version imprimable
là je sèche un peu 'D' serait-il chez toi pris pour un caractère et alors la valeur du code ascii de D (en tout cas pas chez moi thonny python 3.10) mais cela serait l'erreur inverse. Sinon essaie "D" ou alors 'D '
Pour "tromper" pycharm tu peux essayer :
ouCode:df = pd.read_excel(fic, usecols= range(3,4))
Ces 2 codes fonctionnent dans mon IDE Thonny python 3.10Code:df = pd.read_excel(fic, usecols= [3])
Désolé, mais aucune des deux solutions ne fonctionne. Le message d'erreur reste le même. Est-ce faut faire autrement, passer par autre chose que PyCharm ?
Et si on ne spécifie pas la colonne D, mais la première colonne venue et qu'on ajoute une colonne au fur et à mesure ?
-----J'ai installé Thonny, j'ai installé odfpy et pandas sur Thonny. J'ai collé le script (avec D, avec 3...) et j'ai la réponse suivante de la console :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Traceback (most recent call last): File "C:\Users\Utilisateur\AppData\Roaming\Python\Python310\site-packages\pandas\core\indexes\base.py", line 3805, in get_loc return self._engine.get_loc(casted_key) File "index.pyx", line 167, in pandas._libs.index.IndexEngine.get_loc File "index.pyx", line 175, in pandas._libs.index.IndexEngine.get_loc File "pandas\\_libs\\index_class_helper.pxi", line 70, in pandas._libs.index.Int64Engine._check_type KeyError: 'Genre' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\Utilisateur\Thonny-Python\script-avec-pandas.py", line 31, in <module> main() File "C:\Users\Utilisateur\Thonny-Python\script-avec-pandas.py", line 24, in main maliste.append(', '.join(map(str, df['Genre'].tolist()))) File "C:\Users\Utilisateur\AppData\Roaming\Python\Python310\site-packages\pandas\core\frame.py", line 4102, in __getitem__ indexer = self.columns.get_loc(key) File "C:\Users\Utilisateur\AppData\Roaming\Python\Python310\site-packages\pandas\core\indexes\base.py", line 3812, in get_loc raise KeyError(key) from err KeyError: 'Genre'
ben en fait tu peux ne pas utiliser usecols et cela fonctionne :
le seul inconvénient si cela en est un c'est que l'on récupère toutes les colonnes dans df. Mais cela n'est pas grave car on ne traite que la colonne Genre.Code:df = pd.read_excel(fic)
Bon, sur PythonCharm, j'ai le message d'erreur (avec le remplacement indiqué ci-dessus) :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 File "index.pyx", line 167, in pandas._libs.index.IndexEngine.get_loc File "index.pyx", line 196, in pandas._libs.index.IndexEngine.get_loc File "pandas\\_libs\\hashtable_class_helper.pxi", line 7081, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas\\_libs\\hashtable_class_helper.pxi", line 7089, in pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 'Genre' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\Utilisateur\PycharmProjects\essai-modifier_AZE-ods.py\avecpandas.py", line 31, in <module> main() File "C:\Users\Utilisateur\PycharmProjects\essai-modifier_AZE-ods.py\avecpandas.py", line 24, in main maliste.append(', '.join(map(str, df['Genre'].tolist()))) ~~^^^^^^^^^ File "C:\Users\Utilisateur\PycharmProjects\essai-modifier_AZE-ods.py\.venv\Lib\site-packages\pandas\core\frame.py", line 4102, in __getitem__ indexer = self.columns.get_loc(key) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Utilisateur\PycharmProjects\essai-modifier_AZE-ods.py\.venv\Lib\site-packages\pandas\core\indexes\base.py", line 3812, in get_loc raise KeyError(key) from err KeyError: 'Genre' Process finished with exit code 1
tant qu'on aura pas vu tes fichiers source , on pourra longtemps tourner en rond.
En pièce jointe mes 2 fichiers source d'essai.
Bonsoir,
j'ai remplacé mes fichiers dans lesquels il y avait les listes "Genre", par les vôtres (même contenu). Même résultat que précédemment... (même message d'erreur)Pièce jointe 659660Pièce jointe 659662Pièce jointe 659661Pièce jointe 659660Pièce jointe 659662Pièce jointe 659661
Hello,
l'erreur que tu as c'est qu'il ne trouve pas la colonne Genre dans la dataFrame df. Il n'y a pas beaucoup de raisons possibles car avec les fichiers que j'ai fourni il n'y a pas cette erreur chez moi. Soit tu lis d'autres fichiers que ceux que j'ai fourni, soit dans ton code il y a une erreur. Pour voir d'où cela vient rajoute dans ton code juste après le
l' instruction suivante pour afficher les valeurs de fic et de df avant le plantage :Code:df = pd.read_excel(fic)
chez moi j'ai par exemple :Code:print('fichier : ',fic,'\ndf : \n',df)
sinon on peut aussi référencer dans une dataframe une colonne par son index au lieu de son nom avec iloc. Exemple:Citation:
fichier : d:/dev/LibreOffice\Fic1_AZE.ods
df :
Unnamed: 0 Unnamed: 1 Unnamed: 2 Genre
0 NaN NaN NaN documentaire
1 NaN NaN NaN fiction
2 NaN NaN NaN Science-fiction, futur
...
3 représente la 4ème colonne car l'index part de zéro.Code:maliste.append(', '.join(map(str,df.iloc[:, 3].tolist())))
Ami calmant, J.P
[QUOTE=jurassic pork;12045963]Hello,
sinon on peut aussi référencer dans une dataframe une colonne par son index au lieu de son nom avec iloc. Exemple:
3 représente la 4ème colonne car l'index part de zéro.Code:maliste.append(', '.join(map(str,df.iloc[:, 3].tolist())))
Bonjour JP,
pour le coup, il y a un résultat. La colonne D s'affiche avec "nan" dès qu'il y a une cellule vide.
J'ai cela:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 C:\Users\Utilisateur\PycharmProjects\essai-modifier_AZE-ods.py\.venv\Scripts\python.exe C:\Users\Utilisateur\PycharmProjects\essai-modifier_AZE-ods.py\avecpandas.py fichier : C:/Users/Utilisateur/Desktop/Nouveau-dossier/essai-a-jeter\Nouveau-dossier\Fic1_AZE.ods df : Unnamed: 0 Unnamed: 1 Unnamed: 2 Genre 0 NaN NaN NaN documentaire 1 NaN NaN NaN fiction 2 NaN NaN NaN Science-fiction, futur 3 NaN NaN NaN reportage 4 NaN NaN NaN 10 5 NaN NaN NaN NaN 6 NaN NaN NaN comédie 7 NaN NaN NaN fiction fichier : C:/Users/Utilisateur/Desktop/Nouveau-dossier/essai-a-jeter\Nouveau-dossier\Fic2_AZE.ods df : Unnamed: 0 Unnamed: 1 Unnamed: 2 Genre 0 NaN NaN NaN thriller 1 NaN NaN NaN film*; science-fiction 2 NaN NaN NaN nouvelle 3 NaN NaN NaN essai*; philosophie Process finished with exit code 0
Alors cela doit fonctionner avec df['Genre'] ? il y a encore des choses qui ne fonctionnent pas ?
Je ne suis pas un spécialiste de pandas . Il faut regarder dans les paramètres de read_excel , normalement on doit pouvoir obtenir les données que l'on veut ( nombre de lignes, à partir de quelle ligne, sans en-tête etc ...)
Je pense que maintenant la seule raison possible que ça ne fonctionne pas, c'est qu'il y a d'autres caractères dans la cellule que simplement "Genre", par là, je veut dire qu'il y a probablement des espaces avant ou après le mot, par exemple " Genre" ou "Genre " et pas "Genre".