Comment utiliser read_excel pandas géants () pour le fichier Excel avec des feuilles multiples?

voix
0

J'ai un fichier Excel avec beaucoup de feuilles. Dans chaque feuille Il n'y a qu'une seule colonne, qui est la colonne A. Je prévois de lire le fichier Excel avec read_excel()méthode. Est le code Yesterday:

import pandas as PD

ExcelFile  = C:\\AAA.xlsx
SheetNames = ['0', '1', 'S', 'B', 'U'] 
# There are five sheets in this excel file. Those are the sheet names.

PageTotal  = len(SheetNames)

for Page in range(PageTotal):
    df = PD.read_excel(ExcelFile, header=None, squeeze = True, parse_cols = A ,sheetname=str(SheetNames[Page]))
    print df
    #do something with df

Le problème est, les for looppistes une seule fois. En exécutant le deuxième élément de la , for loopil me montre le texte d'erreur suivant:

  File C:\Python27\lib\site-packages\pandas\io\excel.py, line 170, in read_excel
    io = ExcelFile(io, engine=engine)
  File C:\Python27\lib\site-packages\pandas\io\excel.py, line 227, in __init__
    self.book = xlrd.open_workbook(io)
  File C:\Python27\lib\site-packages\xlrd\__init__.py, line 422, in open_workbook
    ragged_rows=ragged_rows,
  File C:\Python27\lib\site-packages\xlrd\xlsx.py, line 824, in open_workbook_2007_xml
    x12sst.process_stream(zflo, 'SST')
  File C:\Python27\lib\site-packages\xlrd\xlsx.py, line 432, in process_stream_iterparse
    for event, elem in ET.iterparse(stream):
  File <string>, line 103, in next
IndexError: pop from empty stack

En tant que débutant, je ne sais pas sur cette erreur. Quelqu'un pourrait me s'il vous plaît aider à corriger les codes? Merci.

MISE À JOUR Question:

Si c'est parce que le fichier Excel contient de nombreux formulars et des liens externes, pourquoi for looppourrait encore exécuter son premier élément? Confus.

Créé 05/08/2016 à 02:10
utilisateur
Dans d'autres langues...                            


3 réponses

voix
0

Se référant à la réponse ici: Utilisation de Pandas à pd.read_excel () pour plusieurs feuilles de calcul du même classeur

Peut-être que vous pouvez essayer ceci:

import pandas as pd
xls = pd.ExcelFile("C:\\AAA.xlsx")
dfs = []
for x in ['0', '1', 'S', 'B', 'U'] :
    dfs.append(xls.parse(x))

Ou cela comme un dict au lieu de la liste de sorte que vous pouvez facilement obtenir une feuille particulière sur de travailler avec

import pandas as pd
xls = pd.ExcelFile("C:\\AAA.xlsx")
dfs = {}
for x in ['0', '1', 'S', 'B', 'U'] :
    dfs[x] = xls.parse(x)
Créé 05/08/2016 à 02:14
source utilisateur

voix
1

Pourquoi utilisez - vous sheetname=str(SheetNames[Page])?

Si je comprends bien votre question, je pense que ce que vous voulez est:

import pandas as PD

excel_file  = r"C:\\AAA.xlsx"
sheet_names = ['0', '1', 'S', 'B', 'U'] 

for sheet_name in sheet_names:
    df = pd.read_excel(excel_file, header=None, squeeze=True, parse_cols="A", sheetname=sheet_name)
    print(df)
    #do something with df 
Créé 05/08/2016 à 03:14
source utilisateur

voix
0

Vous pouvez simplement utiliser:

df = pd.read_excel("C:\\AAA.xlsx", sheet_name=None)  
for key, value in df.items(): 
    ................

Lorsque vous définissez « nom_feuille = None », pandas géants lira automatiquement toutes les feuilles Excel de votre classeur. Et pour itérer sur des feuilles et il est contenu que vous pouvez itérer sur « df.items () » et faire tout ce que la manipulation que vous aurez à faire. Dans ce code ci-dessus « clé » est le nom de feuilles et « valeur » est le contenu à l'intérieur de la feuille. Il n'y a pas besoin de créer un objet de liste supplémentaire, dans votre cas « sheet_names ». Espérons que cela va résoudre votre problème.

Créé 20/08/2019 à 16:50
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more