Bom dia, Leonardo! Tudo bem com você?
Quando não especificamos o usecols()
, a função np.loadtxt
tenta converter todas as entradas em números (neste caso, float64), mas a primeira coluna do CSV contém strings (neste caso, os nomes das frutas) e quando o np.loadtxt
encontra um valor que não pode ser convertido em número ele lança um ValueError
.
Como funciona o np.loadtxt?
- O
np.loadtxt
lê todas as linhas do arquivo de texto. - Tenta converter todos os dados lidos para o tipo especificado (por padrão,
float64
). - Se você usar o parâmetro
usecols
, ele usará apenas as colunas especificadas para a conversão. - Se você não usa o
usecols
, o np.loadtxt
tenta ler todas as colunas do arquivo. Se qualquer coluna contém dados que não podem ser convertidos para números, você encontrará um erro ValueError.
Como ler um arquivo sem o uso do usecols
?
Para ler um arquivo CSV que contém dados mistos (números e strings), você pode usar o np.genfromtxt em vez do np.loadtxt
. O np.genfromtxt
é mais flexível e pode lidar com colunas de tipos diferentes. Exemplo:
import numpy as np
url = 'https://raw.githubusercontent.com/allanspadini/numpy/dados/citrus.csv'
dado = np.genfromtxt(url, delimiter=',', dtype=None, encoding='utf-8', skip_header=1)
print(dado)
print(dado.shape)
Para conhecer mais sobre a função genfromtxt
, recomendo a leitura da documentação.Está em inglês, mas, usando o recurso de tradução de páginas do próprio navegador, é possível compreender.
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado