Как использовать панда read_excel () для файла Excel с несколькими листами?

голоса
0

У меня есть один файл первенствовать с большим количеством листов. Существует только один столбец в каждом листе, который является столбец A. Я планирую прочитать файл первенствовать с read_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

Как новичок, я понятия не имею об этой ошибке. Может кто-нибудь, пожалуйста, помогите мне исправить коды? Благодарю.

UPDATE Вопрос:

Если это происходит потому , что файл Excel содержит множество формуляров и внешние связи, поэтому for loopвсе еще может запустить свой первый пункт? Смущенный.

Задан 05/08/2016 в 02:10
пользователем
На других языках...                            


3 ответов

голоса
0

Ссылаясь на ответ здесь: Использование Панды в pd.read_excel () для нескольких рабочих листов тех же книг

Может быть, вы можете попробовать это:

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

Или это как Dict вместо списка, так что вы можете легко получить конкретный лист на работу с

import pandas as pd
xls = pd.ExcelFile("C:\\AAA.xlsx")
dfs = {}
for x in ['0', '1', 'S', 'B', 'U'] :
    dfs[x] = xls.parse(x)
Ответил 05/08/2016 в 02:14
источник пользователем

голоса
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 
Ответил 05/08/2016 в 03:14
источник пользователем

голоса
0

Вы можете просто использовать:

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

Когда вы установите «название_лист = None», панды автоматически считывают все первенствовать листы из вашей книги. И для итерация листов и его содержание можно перебрать «df.items ()» и делать все манипуляции вы должны сделать. В этом выше кода ключа «» это имя листов и «значение» это содержание внутри листа. Там нет необходимости создавать дополнительный объект списка, в вашем случае «sheet_names». Надеюсь, что это решит проблему.

Ответил 20/08/2019 в 16:50
источник пользователем

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