Como usar read_excel pandas () para arquivo do Excel com multi folhas?

votos
0

Eu tenho um arquivo excel com muitas folhas. Há apenas uma coluna em cada folha, que é a coluna A. Eu pretendo ler o arquivo excel com read_excel()método. Hier é o código:

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

O problema é que as for looppistas de apenas uma vez. Ao executar o segundo item na for loopele me mostra o seguinte texto de erro:

  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

Como um novato eu não tenho nenhuma idéia sobre esse erro. Poderia alguém por favor me ajudar a corrigir os códigos? Obrigado.

ATUALIZAÇÃO Pergunta:

Se é por causa de que o arquivo excel contém muitos formulars e links externos, por isso que o for loopainda podia correr o seu primeiro produto? Confuso.

Publicado 05/08/2016 em 02:10
usuário
Em outras línguas...                            


3 respostas

votos
0

Referindo-se a resposta aqui: Usando pandas para pd.read_excel () para várias folhas de cálculo do mesmo livro

Talvez você pode tentar este:

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 isso como um dicionário em vez de lista, assim você pode facilmente obter uma folha especial para trabalhar com

import pandas as pd
xls = pd.ExcelFile("C:\\AAA.xlsx")
dfs = {}
for x in ['0', '1', 'S', 'B', 'U'] :
    dfs[x] = xls.parse(x)
Respondeu 05/08/2016 em 02:14
fonte usuário

votos
1

Por que você está usando sheetname=str(SheetNames[Page])?

Se entendi sua pergunta corretamente eu acho que você quer é:

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 
Respondeu 05/08/2016 em 03:14
fonte usuário

votos
0

Você pode simplesmente usar:

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

Quando você define 'SHEET_NAME = None', pandas lerá automaticamente todas excel folhas de seu livro. E para iteração sobre folhas e é conteúdo que você pode iterar sobre 'df.items ()' e fazer o que a manipulação que você vai ter que fazer. Neste código 'chave' acima é o nome folhas e 'valor' é o conteúdo dentro da folha. Não há necessidade de criar adicional objeto da lista, no seu caso 'sheet_names'. Espero que isso vai resolver o seu problema.

Respondeu 20/08/2019 em 16:50
fonte usuário

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