7
votes

AttributeError: l'objet 'ElementTree' n'a pas d'attribut 'getiterator' lors de la tentative d'importation d'un fichier Excel

Ceci est mon code. Je viens d'installer jupyterlab et j'y ai ajouté le fichier Excel. Même erreur si je change le chemin vers l'emplacement du fichier sur mon système. Je n'arrive pas à trouver quelqu'un qui a eu le même problème lors de l'importation d'un fichier Excel en tant que dataframe.

Le fichier Excel est une table 3x26 avec des colonnes studentnr, course, result qui ont des valeurs comme 101-105, AD, 1.0-9.9 respectivement. Peut-être que le problème réside dans le fichier Excel?

Quoi qu'il en soit, je n'ai aucune idée de comment résoudre ce problème.

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-6-9d38e4d56bbe> in <module>
      1 import pandas as pd
      2 import numpy as np
----> 3 df = pd.read_excel('student-results.xlsx')

c:\python\lib\site-packages\pandas\util\_decorators.py in wrapper(*args, **kwargs)
    294                 )
    295                 warnings.warn(msg, FutureWarning, stacklevel=stacklevel)
--> 296             return func(*args, **kwargs)
    297 
    298         return wrapper

c:\python\lib\site-packages\pandas\io\excel\_base.py in read_excel(io, sheet_name, header, names, index_col, usecols, squeeze, dtype, engine, converters, true_values, false_values, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, parse_dates, date_parser, thousands, comment, skipfooter, convert_float, mangle_dupe_cols)
    302 
    303     if not isinstance(io, ExcelFile):
--> 304         io = ExcelFile(io, engine=engine)
    305     elif engine and engine != io.engine:
    306         raise ValueError(

c:\python\lib\site-packages\pandas\io\excel\_base.py in __init__(self, path_or_buffer, engine)
    865         self._io = stringify_path(path_or_buffer)
    866 
--> 867         self._reader = self._engines[engine](self._io)
    868 
    869     def __fspath__(self):

c:\python\lib\site-packages\pandas\io\excel\_xlrd.py in __init__(self, filepath_or_buffer)
     20         err_msg = "Install xlrd >= 1.0.0 for Excel support"
     21         import_optional_dependency("xlrd", extra=err_msg)
---> 22         super().__init__(filepath_or_buffer)
     23 
     24     @property

c:\python\lib\site-packages\pandas\io\excel\_base.py in __init__(self, filepath_or_buffer)
    351             self.book = self.load_workbook(filepath_or_buffer)
    352         elif isinstance(filepath_or_buffer, str):
--> 353             self.book = self.load_workbook(filepath_or_buffer)
    354         elif isinstance(filepath_or_buffer, bytes):
    355             self.book = self.load_workbook(BytesIO(filepath_or_buffer))

c:\python\lib\site-packages\pandas\io\excel\_xlrd.py in load_workbook(self, filepath_or_buffer)
     35             return open_workbook(file_contents=data)
     36         else:
---> 37             return open_workbook(filepath_or_buffer)
     38 
     39     @property

c:\python\lib\site-packages\xlrd\__init__.py in open_workbook(filename, logfile, verbosity, use_mmap, file_contents, encoding_override, formatting_info, on_demand, ragged_rows)
    128         if 'xl/workbook.xml' in component_names:
    129             from . import xlsx
--> 130             bk = xlsx.open_workbook_2007_xml(
    131                 zf,
    132                 component_names,

c:\python\lib\site-packages\xlrd\xlsx.py in open_workbook_2007_xml(zf, component_names, logfile, verbosity, use_mmap, formatting_info, on_demand, ragged_rows)
    810     del zflo
    811     zflo = zf.open(component_names['xl/workbook.xml'])
--> 812     x12book.process_stream(zflo, 'Workbook')
    813     del zflo
    814     props_name = 'docprops/core.xml'

c:\python\lib\site-packages\xlrd\xlsx.py in process_stream(self, stream, heading)
    264         self.tree = ET.parse(stream)
    265         getmethod = self.tag2meth.get
--> 266         for elem in self.tree.iter() if Element_has_iter else self.tree.getiterator():
    267             if self.verbosity >= 3:
    268                 self.dump_elem(elem)

AttributeError: 'ElementTree' object has no attribute 'getiterator'

Voici l'erreur que j'obtiens:

import pandas as pd
import numpy as np
df = pd.read_excel('student-results.xlsx')


0 commentaires

4 Réponses :


11
votes

Vous pouvez essayer d'utiliser un argument engine = "openpyxl". Cela m'a aidé à résoudre le même problème.


1 commentaires

cela devrait être la solution acceptée.



1
votes

Vous pouvez consulter la description du problème ici . Vous exécutez Python 3.9 et utilisez la bibliothèque xlrd qui appelle la méthode getiterator supprimée. Vous devriez trouver une partie du code dans le fichier à partir de votre "Trace back" et remplacer getiterator par iter .

Il peut être nécessaire d'exécuter le fichier Python et de le remplacer plusieurs fois.


0 commentaires

-1
votes

Suivez les étapes ci-dessous:

  1. Accédez à /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/xlrd
  2. ouvrez le xlsx.py dans n'importe quel éditeur de texte et remplacez les deux méthodes getiterator () par iter ().
  3. Rechargez votre notebook Jupiter. Ça va marcher.

0 commentaires

0
votes

Pour éviter de xlrd avec xlrd , vous pouvez également enregistrer votre fichier Excel avec l'extension .xls au lieu de .xlsx .


0 commentaires