Jak používat pandy read_excel () pro soubor aplikace Excel s multi listy?

hlasů
0

Mám jeden soubor aplikace Excel s mnoha listy. K dispozici je pouze jeden sloupec v každém listu, což je sloupec A. Mám v plánu přečíst soubor Excel s read_excel()metodou. Hier je kód:

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

Problém je v tom, že for loopprobíhá pouze jednou. Spuštěním druhou položku v for loopněm ukazuje mi následující text chyby:

  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

Jako začátečník nemám ponětí o této chybě. Mohl by někdo prosím, pomozte mi opravit kódy? Dík.

UPDATE Otázka:

Jestli je to proto, že soubor Excel obsahuje mnoho formulars a externí odkazy, proč for loopby ještě spustit svou první položku? Zmatený.

Položena 05/08/2016 v 02:10
uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

S odvoláním na odpověď zde: Použití pandy do pd.read_excel () pro více listů stejného sešitu

Možná můžete zkusit toto:

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

Nebo to jako dict místo seznamu, takže můžete snadno získat zvláštní list do práce s

import pandas as pd
xls = pd.ExcelFile("C:\\AAA.xlsx")
dfs = {}
for x in ['0', '1', 'S', 'B', 'U'] :
    dfs[x] = xls.parse(x)
Odpovězeno 05/08/2016 v 02:14
zdroj uživatelem

hlasů
1

Proč používáte sheetname=str(SheetNames[Page])?

Mám-li správně pochopit vaši otázku Myslím, že to, co chcete, je:

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 
Odpovězeno 05/08/2016 v 03:14
zdroj uživatelem

hlasů
0

Můžete jednoduše použít:

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

Pokud nastavíte SHEET_NAME = None ', bude pandy automaticky číst všechny vynikají listů ze sešitu. A iterace přes listy a je to obsah můžete iteraci ‚df.items ()‘ a dělat, co manipulace budete muset udělat. V tomto výše uvedeném kódu ‚klíč‘ je název listy a ‚hodnotou‘ je obsah uvnitř listu. Není potřeba vytvářet zvláštní seznam objektů, ve vašem případě ‚sheet_names‘. Doufám, že se to vyřeší váš problém.

Odpovězeno 20/08/2019 v 16:50
zdroj uživatelem

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