如何使用pandas read_excel()为多张表格的excel文件?

时间:2016-08-05 03:10:39

标签: python pandas

我有一个包含许多工作表的excel文件。每个工作表中只有一列,即A列。我计划使用read_excel()方法读取excel文件。 Hier是代码:

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

问题是,for loop只运行一次。通过运行for loop中的第二项,它会显示以下错误文本:

  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

作为初学者,我不知道这个错误。有人可以帮我纠正代码吗?感谢。

更新问题:

如果是因为excel文件包含许多公式和外部链接,为什么for loop仍然可以运行其第一项?困惑。

3 个答案:

答案 0 :(得分:1)

您为什么使用sheetname=str(SheetNames[Page])

如果我理解你的问题,我认为你想要的是:

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 

答案 1 :(得分:0)

参考答案: Using Pandas to pd.read_excel() for multiple worksheets of the same workbook

也许你可以试试这个:

Posts

或者这是一个字典而不是列表,因此您可以轻松地获取特定的工作表以使用

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

答案 2 :(得分:0)

您可以简单地使用:

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

当您设置“ sheet_name = None”时,熊猫会自动从您的工作簿中读取所有Excel工作表。为了遍历工作表及其内容,您可以遍历'df.items()'并进行任何必须要做的操作。在上面的代码中,“键”是工作表名称,“值”是工作表内的内容。在您的情况下,无需创建额外的列表对象“ sheet_names”。希望它能解决您的问题。