A nova versão do Pandas usa a seguinte interface para carregar arquivos do Excel:
read_excel('path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA'])
mas e se eu não souber as folhas disponíveis?
Por exemplo, estou trabalhando com arquivos do Excel que as folhas a seguir
Dados 1, Dados 2 ..., Dados N, foo, bar
mas eu não sei N
a priori.
Existe alguma maneira de obter a lista de planilhas de um documento do Excel no Pandas?
ExcelFile
? Além disso, digamos que eu procure na lista de planilhas e decida carregar N delas, nesse momento devo chamarread_excel
(a nova interface) para cada planilha ou seguirx1.parse
?{sheet_name: xl.parse(sheet_name) for sheet_name in xl.sheet_names}
Você deve especificar explicitamente o segundo parâmetro (nome da planilha) como Nenhum. como isso:
"df" são todas as planilhas como um dicionário de DataFrames, você pode verificá-lo executando o seguinte:
resultado como este:
consulte o documento do pandas para obter mais detalhes: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html
fonte
Esta é a maneira mais rápida que encontrei, inspirada na resposta do @ divingTobi. Todas As respostas baseadas em xlrd, openpyxl ou pandas são lentas para mim, pois todas elas carregam o arquivo inteiro primeiro.
fonte
Com base na resposta de @dhwanil_shah, você não precisa extrair o arquivo inteiro. Com
zf.open
isso, é possível ler diretamente de um arquivo compactado.Os dois
readline
s consecutivos são feios, mas o conteúdo está apenas na segunda linha do texto. Não há necessidade de analisar o arquivo inteiro.Essa solução parece ser muito mais rápida que a
read_excel
versão e, provavelmente, também mais rápida que a versão de extração completa.fonte
Eu tentei xlrd, pandas, openpyxl e outras bibliotecas desse tipo e todas parecem demorar um tempo exponencial à medida que o tamanho do arquivo aumenta à medida que lê o arquivo inteiro. As outras soluções mencionadas acima, onde eles usaram 'on_demand', não funcionaram para mim. Se você deseja apenas obter os nomes das planilhas inicialmente, a função a seguir funciona para arquivos xlsx.
Como todos os xlsx são basicamente arquivos compactados, extraímos os dados xml subjacentes e lemos os nomes das planilhas diretamente da pasta de trabalho, o que leva uma fração de segundo em comparação com as funções da biblioteca.
Benchmarking: (em um arquivo xlsx de 6mb com 4 folhas)
Pandas, xlrd: 12 segundos
openpyxl: 24 segundos
Método proposto: 0,4 segundos
Como minha exigência era apenas ler os nomes das planilhas, a sobrecarga desnecessária de ler o tempo todo estava me incomodando, então eu segui essa rota.
fonte
zipfile
que é um módulo embutido e oxmltodict
usado para converter o XML em um dicionário facilmente iterável. Embora você possa ver a resposta do @ divingTobi abaixo, você pode ler o mesmo arquivo sem extrair os arquivos.load_workbook(excel_file).sheetnames
em média 8,24s, emload_workbook(excel_file, read_only=True).sheetnames
média, 39,6ms.Para um arquivo do Excel de 5 MB em que estou trabalhando,
load_workbook
sem oread_only
sinalizador demorou 8,24s. Com aread_only
bandeira, foram necessários apenas 39,6 ms. Se você ainda deseja usar uma biblioteca do Excel e não usar uma solução xml, isso é muito mais rápido que os métodos que analisam o arquivo inteiro.fonte