2016-08-05 11 views
0

Ich habe eine Excel-Datei mit vielen Blättern. Es gibt nur eine Spalte in jedem Blatt, nämlich Spalte A. Ich habe vor, die Excel-Datei mit der Methode read_excel() zu lesen. Hier ist der Code:Wie pandas read_excel() für Excel-Datei mit mehreren Blättern verwenden?

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 

Das Problem ist, das for loop nur einmal ausgeführt wird. Durch die Ausführung des zweiten Elements in der for loop zeigt es mir die folgende Fehlertext:

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 

Als Anfänger ich keine Ahnung über diesen Fehler haben. Könnte mir bitte jemand helfen, die Codes zu korrigieren? Vielen Dank.

UPDATE Frage:

Wenn es da, dass die Datei Excel viele Formulare und externe Links enthält, warum die for loop noch seinen ersten Punkt laufen könnte? Verwirrt.

+0

ich denke, sollten Sie irgendwo eine Probe und Excel-Datei, die diesen Fehler reproduzieren helfen können und hier einen Link zu dieser Datei schreiben. PS ich konnte nicht reproduzieren Ihren Fehler mit meinem Beispiel Excel-Datei - alles funktioniert so, wie es sollte – MaxU

+0

@MaxU Danke für den Hinweis. Ich habe gerade getestet, der Code funktioniert gut mit einer einfachen und kleinen Excel-Datei. Aber meine Excel-Datei ist sehr groß und komplex, sie enthält viele formels und viele externe Links. Ich bin nicht sicher, ob es funktioniert, wenn ich nur eine Excel-Datei hochladen ... Wie auch immer, die Excel-Datei sollte der Grund sein. Vielen Dank! – Rita

+0

Es könnte Formeln und externe Links sein, die diese Probleme verursachen. So können Sie versuchen, Ihre Datei als CSV-Datei zu speichern/exportieren und in Pandas lesen – MaxU

Antwort

0

auf die Antwort Bezug hier: Using Pandas to pd.read_excel() for multiple worksheets of the same workbook

Vielleicht können Sie versuchen, diese:

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

Oder dies als dict statt Liste, so dass Sie leicht ein bestimmtes Blatt zur Arbeit mit

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

Danke. Aber ich werde nicht alle DataFrames kombinieren. Ich muss mit jedem Blatt separat arbeiten. – Rita

+0

Die Methode, die Sie in dem Link erwähnt haben, funktioniert nicht für mich. :-( – Rita

+0

Was ist der Fehler, den Sie bekommen, wenn Sie sagen "es funktioniert nicht für mich"? – Porz

1

Warum verwenden Sie sheetname=str(SheetNames[Page])?

Wenn ich verstehe Ihre Frage richtig denke ich, was Sie wollen, ist:

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 
+0

Das sind nur zwei verschiedene Schreibmethoden von Schleifen, oder? Ich habe getestet, die Fehlermeldung ist die gleiche. – Rita

Verwandte Themen