4
respostas

Erro: iValueError: could not convert string to float: '01/01/2015'

Pessoal sabem o pq esse erro ? Estou repetindo o passo a passo da aula e pra mim deu esse erro

--------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[19], line 1
----> 1 dados.corr().round(4)

File ~\anaconda3\Lib\site-packages\pandas\core\frame.py:10054, in DataFrame.corr(self, method, min_periods, numeric_only)
  10052 cols = data.columns
  10053 idx = cols.copy()
> 10054 mat = data.to_numpy(dtype=float, na_value=np.nan, copy=False)
  10056 if method == "pearson":
  10057     correl = libalgos.nancorr(mat, minp=min_periods)

File ~\anaconda3\Lib\site-packages\pandas\core\frame.py:1838, in DataFrame.to_numpy(self, dtype, copy, na_value)
   1836 if dtype is not None:
   1837     dtype = np.dtype(dtype)
-> 1838 result = self._mgr.as_array(dtype=dtype, copy=copy, na_value=na_value)
   1839 if result.dtype is not dtype:
   1840     result = np.array(result, dtype=dtype, copy=False)

File ~\anaconda3\Lib\site-packages\pandas\core\internals\managers.py:1732, in BlockManager.as_array(self, dtype, copy, na_value)
   1730         arr.flags.writeable = False
   1731 else:
-> 1732     arr = self._interleave(dtype=dtype, na_value=na_value)
   1733     # The underlying data was copied within _interleave, so no need
   1734     # to further copy if copy=True or setting na_value
   1736 if na_value is not lib.no_default:

File ~\anaconda3\Lib\site-packages\pandas\core\internals\managers.py:1794, in BlockManager._interleave(self, dtype, na_value)
   1792     else:
   1793         arr = blk.get_values(dtype)
-> 1794     result[rl.indexer] = arr
   1795     itemmask[rl.indexer] = 1
   1797 if not itemmask.all():

ValueError: could not convert string to float: '01/01/2015'
4 respostas

Oi, Victor! Tudo bom?

Esse erro geralmente acontece quando o método corr() tenta converter um dado do tipo string em float, o que nem sempre é possível.

O método corr() é usado para calcular a correlação entre colunas numéricas. Portanto, se o seu conjunto de dados contém colunas que não são numéricas (como datas ou strings), precisaremos remover ou ignorar essas colunas antes de calcular a correlação, pois nem sempre elas serão retiradas automaticamente.

Uma possível solução é selecionar apenas as colunas numéricas do nosso DataFrame usando o método select_dtypes da biblioteca Pandas. Observe comigo o exemplo abaixo:

dados_numericos = dados.select_dtypes(include='number')
correlacao = dados_numericos.corr().round(4)

Neste caso, informamos ao select_dtypes que só devem ser considerados as informações numéricas de dados. Após armazená-las em uma variável, a utilizamos para gerar a correlação.

Outro caminho possível é utilizar a função iloc, também do Pandas. Aqui, repartimos o nosso DataFrame e descartamos a primeira coluna, a qual possui valores do tipo string:

dados_sem_primeira_coluna = dados.iloc[:, 1:]
correlacao = dados_sem_primeira_coluna.corr().round(4)

Caso queira conhecer um pouco mais os métodos que utilizei, recomendo a leitura dos seguintes materiais:

As páginas estão em inglês, contudo, caso não tenha familiaridade com o idioma, você pode clicar sobre a tela com o botão direito do mouse e escolher a opção de traduzir para o português!

Victor, espero que dê tudo certo. Caso o problema continue ou surjam outras dúvidas, estarei por aqui.

Um abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Oi Adriele td bem sim e vc? Mas no caso do video aula modulo 1 último vídeo o passo a passo o professor considera a coluna data certo? Para gerar os resultados estatísticos

Eu criei isso como solução

Eu criei isso como sInsira aqui a descrição dessa imagem para ajudar na acessibilidade

Eu criei isso como solução ao criar uma nova variável para o problema em questão

Oi, Victor! Estou bem, obrigada por perguntar. :)

Sim, o instrutor considera a coluna de datas. No entanto, ao gerar a matriz de correlação, esses dados são automaticamente "desconsiderados" — visto que o nosso foco de estudo é compreender o comportamento das variáveis temp_media, temp_min, temp_max, chuva, fds e consumo. Isso acontece porque, geralmente, é mais relevante analisar apenas as variáveis numéricas, pois as datas são valores categóricos ou temporais.

Victor, sobre a sua nova variável: observe que ela modificou os valores contidos nas estatísticas descritivas e na matriz de correlação. Nesse sentido, recomendo não utilizar a célula das = dados.describe().round(2). Sugiro seguir com os códigos abaixo e realizar as dicas que comentei na minha primeira resposta:

dados = pd.read_csv('../Dados/Consumo_cerveja.csv', sep=';')
dados.describe().round(2)
dados_numericos = dados.select_dtypes(include='number')
correlacao = dados_numericos.corr().round(4)
correlacao

Com isso, chegaremos em informações concretas para a nossa análise preliminar.

Espero ter ajudado, Victor!

Até mais.