Gostaria de saber se existe uma maneira direta para importar o conteúdo de um arquivo CSV em uma matriz disco, muito na maneira que de R read.table()
, read.delim()
e read.csv()
as importações familiares de dados para quadro de dados do R?
Ou é a melhor maneira de usar csv.reader () e aplicar algo como numpy.core.records.fromrecords()
?
python
numpy
scipy
genfromtxt
hatmatrix
fonte
fonte
Respostas:
Você pode usar o
genfromtxt()
método do Numpy para isso, definindo odelimiter
kwarg como vírgula.Mais informações sobre a função podem ser encontradas na respectiva documentação .
fonte
nan
valores, por quê? Também com loadtxt, estou recebendoUnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 155: ordinal not in range(128)
. Eu tenho tremas como ä e ö nos dados de entrada.encoding="utf8"
argumento. O Python é uma das poucas peças de software modernas que freqüentemente causam problemas de codificação de texto, que parecem coisas do passado.Eu recomendaria a
read_csv
função dapandas
biblioteca:Isso fornece um DataFrame do pandas - permitindo muitas funções úteis de manipulação de dados que não estão diretamente disponíveis com matrizes de registros numpy .
Eu também recomendaria
genfromtxt
. No entanto, como a pergunta solicita uma matriz de registros , em oposição a uma matriz normal, odtype=None
parâmetro precisa ser adicionado àgenfromtxt
chamada:Dado um arquivo de entrada,
myfile.csv
:dá uma matriz:
e
fornece uma matriz de registros:
Isso tem a vantagem de que arquivos com vários tipos de dados (incluindo cadeias) podem ser facilmente importados .
fonte
(1000, 1)
.np.genfromtxt
não faz isso: por exemplo(1000,)
.Eu cronometrei o
versus
em 4,6 milhões de linhas com cerca de 70 colunas e constatou que o caminho do NumPy levou 2 minutos e 16 segundos e o método de compreensão da lista csv levou 13 segundos.
Eu recomendaria o método de compreensão da lista csv, pois ele provavelmente depende de bibliotecas pré-compiladas e não do intérprete tanto quanto do NumPy. Eu suspeito que o método dos pandas teria uma sobrecarga de intérprete semelhante.
fonte
Você também pode tentar
recfromcsv()
adivinhar os tipos de dados e retornar uma matriz de registros formatada corretamente.fonte
numpy.recfromcsv(fname, delimiter=',', filling_values=numpy.nan, case_sensitive=True, deletechars='', replace_space=' ')
Os principais argumentos são os três últimos.Como tentei nos dois sentidos usando o NumPy e o Pandas, o uso de pandas tem muitas vantagens:
Este é o meu código de teste:
test_numpy_csv.py
test_pandas.py
Arquivo de dados:
Com NumPy e pandas nas versões:
fonte
Você pode usar esse código para enviar dados do arquivo CSV para uma matriz:
fonte
Usando
numpy.loadtxt
Um método bastante simples. Mas exige que todos os elementos sejam flutuados (int e assim por diante)
fonte
Esta é a maneira mais fácil:
import csv with open('testfile.csv', newline='') as csvfile: data = list(csv.reader(csvfile))
Agora, cada entrada nos dados é um registro, representado como uma matriz. Então você tem uma matriz 2D. Isso me salvou muito tempo.
fonte
Eu tentei isso:
fonte
Eu sugeriria o uso de tables (
pip3 install tables
). Você pode salvar seu.csv
arquivo.h5
usando pandas (pip3 install pandas
),Você pode facilmente, e com menos tempo, mesmo para uma enorme quantidade de dados, carregar seus dados em uma matriz NumPy .
fonte
Este trabalho como um encanto ...
fonte