0
respostas

[Dúvida] Diferença entre bibliotecas.

Olá, gostaria de tirar uma dúvida a respeito de um procedimento que NÃO funciona para biblioteca Pandas, mas funciona para a biblioteca xlrd.

1º Caso - Importar os dados de uma planilha do excel para uma variável a partir da biblioteca XLRD e realizar uma operação de subtração de vetores transformando a string em uma array através da biblioteca numpy.

Obs.: seguem os dados da planilha => [1.31, 1.34, 1.42, 1.4, 1.42, 1.4, 1.47, 1.45, 1.48, 1.42, 1.34, 1.34, 1.35, 1.35, 1.36, 1.32, 1.24, 1.22, 1.27, 1.26]

petrobras.xlsx

import xlrd
import numpy as np

wb = xlrd.open_workbook('petrobras.xlsx')
plan = wb.sheet_by_name('Planilha1')
x = plan.col_values(0) 
vetor = np.array(x) 

calculo = (vetor[1:20]-vetor[0:19])/vetor[0:19]

Foi possível efetuar o cálculo normalmente através dos valores dos vetores.

2º Caso - Importar os dados de uma planilha do excel para uma variável a partir da biblioteca PANDAS e realizar uma operação de subtração de vetores transformando a string em uma array através da biblioteca numpy.

import pandas as pd
import numpy as np

wb = pd.read_excel('petrobras.xlsx')
vetor = wb.values.reshape(-1) #transformar o dataframe em array
calculo = (vetor [1:20]-vetor [0:19])/vetor [0:19]

ValueError: operands could not be broadcast together with shapes (18,) (19,) 

Compreendo que o erro seja em função de de que no caso 2 a variável calculo esteja sendo atribuída a uma operação matemática com arrays de dimensões distintas, o que não ocorre no caso 1.

Tanto no caso 1 quanto no caso 2, a variável vetor é do tipo numpy.ndarray, porém, não consegui entender o porquê de haver esta diferença de dimensões na segunda situação, enquanto isto não ocorreu na primeira.

OBS.: para quem for tentar importar o arquivo .xlsx através da biblioteca xlrd e tiver erro, deverá ser instalada a versão 1.2.0. Através do seguinte comando: pip install xlrd==1.2.0

OBS[2]: caso apareça o erro AttributeError: 'ElementTree' object has no attribute 'getiterator' ao tentar executar a função open_workbook, é necessário utilizar os seguintes comandos:

xlrd.xlsx.ensure_elementtree_imported(False, None)
xlrd.xlsx.Element_has_iter = True