1
resposta

Duvida usecols()

Minha resolução ficou identica a da correção. Porem fiquei com uma duvida, acabei abrindo o CSV para identificar quantidade de colunas. Tentei ler sem usar o .usecols() mas tive erros como (ValueError: could not convert string 'nome,diametro,peso,vermelho,verde,azul' to float64 at row 0, column 1.). E não conseguiria usar o shape sem ter atribuido os dados a uma variável. Como eu faria para ler sem usar o .usecols()?

1 resposta

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)

Imagem que mostra a execução do código acima lendo sem usar usecols

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