Estou usando o polars v1.12.0 para ler dados de uma planilha do Excel.
pl.read_excel(
"test.xlsx",
sheet_name="test",
has_header=True,
columns=list(range(30, 49))
)
As colunas solicitadas estão sendo importadas corretamente. No entanto, o polars adiciona um sufixo _1
a cada nome de coluna. Há um cabeçalho de coluna onde um _3
foi adicionado.
Nas colunas solicitadas, todos os cabeçalhos de coluna são únicos, ou seja, sem duplicatas. No entanto, as colunas antes desta área de importação têm os mesmos valores. Por exemplo, o cabeçalho que foi sufixado _3
ocorre duas vezes antes da minha área de importação.
Parece que o Polars está escaneando todos os cabeçalhos de coluna a partir da coluna "A", não importa se eu começo a ler a partir da coluna "AE".
Estou me perguntando o que está acontecendo? Isso é um bug ou eu cometi um erro?
Não acho que você tenha cometido um erro, o comportamento parece apenas diferir muito entre os diferentes mecanismos, e nenhum deles faz o que você quer fazer.
Tenho o seguinte excel:
Para o seguinte trecho de código:
Aqui está o que obtenho ao usar diferentes mecanismos do Excel:
Calamina (padrão)
Então a sequência parece ser:
columns
Xlsx2csv (padrão anterior)
Sim, sério, ele está removendo charlie, delta e echo completamente. Acho que é um bug direto. Se você começar a indexação do 0 e listar todas as colunas, ele mostra todas as colunas, mas se você começar do 1, ele já remove
alfa
ANDbravo
.Openpyxl
Isso agora está descartando todas as colunas com os nomes duplicados primeiro e, em seguida, pegando os índices de coluna definidos em
columns
. A rigor, nem mesmo descartando, mascolumns
sem levar em conta os nomes duplicadosAs colunas 3, 4 e 5 agora são
delta, echo foxtrot
, e 6 e 7 não apontam para lugar nenhum.O que fazer
Então, com base nisso, acho que sua melhor aposta é usar o
calamine
mecanismo padrão e então substituir manualmente as colunas:Quanto ao seu dilema nos comentários sobre empilhar as colunas com nomes diferentes, isso "funciona", mas somente quando você conhece os nomes das colunas e o esquema de antemão. Também é estupidamente feio e provavelmente não tem muito desempenho. Espero que haja maneiras melhores.
Em qualquer caso, uma solução como ler todas as colunas do Excel e depois manipular o df é provavelmente mais fácil do que tentar manipular o leitor.
Para excel com colunas
alfa | bravo | charlie | alfa | bravo | charlie