我有一个包含许多工作表的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
仍然可以运行其第一项?困惑。
答案 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”。希望它能解决您的问题。