Come usare i panda read_excel () per il file di Excel con fogli multipli?

voti
0

Ho un file excel con molti fogli. C'è solo una colonna in ogni foglio, che è la colonna A. Ho intenzione di leggere il file di excel con read_excel()metodo. Hier è il codice:

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

Il problema è che le for loopcorse solo una volta. Eseguendo la seconda voce in for loopesso mi mostra il seguente testo di errore:

  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

Come un principiante non ho idea su questo errore. Chiunque potrebbe si prega di aiutarmi a correggere i codici? Grazie.

UPDATE Domanda:

Se è perché che il file di Excel contiene molte formulars e link esterni, per cui la for looppotrebbe ancora fare il suo primo articolo? Confuso.

È pubblicato 05/08/2016 alle 02:10
dall'utente
In altre lingue...                            


3 risposte

voti
0

Riferendosi alla risposta qui: Utilizzo Pandas a pd.read_excel () per più fogli della stessa cartella di lavoro

Forse si può provare questo:

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

O questo come un dict invece di lista in modo da poter facilmente ottenere un foglio particolare a lavorare con

import pandas as pd
xls = pd.ExcelFile("C:\\AAA.xlsx")
dfs = {}
for x in ['0', '1', 'S', 'B', 'U'] :
    dfs[x] = xls.parse(x)
Risposto il 05/08/2016 a 02:14
fonte dall'utente

voti
1

Perché stai usando sheetname=str(SheetNames[Page])?

Se ho ben capito la tua domanda correttamente Penso che quello che vuoi è:

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 
Risposto il 05/08/2016 a 03:14
fonte dall'utente

voti
0

Si può semplicemente utilizzare:

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

Quando si imposta 'SHEET_NAME = Nessuno', panda leggerà automaticamente tutti i fogli excel dalla cartella di lavoro. E per iterare su fogli ed è contenuto che si può iterare 'df.items ()' e fare quello manipolazione che si dovrà fare. In questo 'tasto' codice sopra è il nome fogli e 'valore' è il contenuto all'interno del foglio. Non v'è alcuna necessità di creare l'oggetto lista in più, nel tuo caso 'sheet_names. Spero che possa risolvere il problema.

Risposto il 20/08/2019 a 16:50
fonte dall'utente

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