Me pregunto si hay una forma directa de importar el contenido de un archivo CSV en una matriz de registro, tanto en la forma en que de R read.table(), read.delim()y read.csv()la importación de datos a la familia trama de datos de R?
¿O es la mejor manera de usar csv.reader () y luego aplicar algo como numpy.core.records.fromrecords()?
python
numpy
scipy
genfromtxt
hatmatrix
fuente
fuente

Respuestas:
Puede usar el
genfromtxt()método de Numpy para hacerlo, estableciendo eldelimiterkwarg en una coma.Puede encontrar más información sobre la función en su documentación respectiva .
fuente
nanvalores, ¿por qué? También con loadtxt, estoy obteniendoUnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 155: ordinal not in range(128). Tengo diéresis como ä y ö en los datos de entrada.encoding="utf8"argumento. Python es una de las pocas piezas de software modernas que con frecuencia causa problemas de codificación de texto, que se sienten como cosas del pasado.Recomendaría la
read_csvfunción de lapandasbiblioteca:Esto proporciona un DataFrame de pandas , que permite muchas funciones útiles de manipulación de datos que no están disponibles directamente con matrices de registros numpy .
Yo también lo recomendaría
genfromtxt. Sin embargo, dado que la pregunta solicita una matriz de registros , a diferencia de una matriz normal, eldtype=Noneparámetro debe agregarse a lagenfromtxtllamada:Dado un archivo de entrada,
myfile.csv:da una matriz:
y
da una matriz de registros:
Esto tiene la ventaja de que el archivo con múltiples tipos de datos (incluidas las cadenas) se puede importar fácilmente .
fuente
(1000, 1).np.genfromtxtno hace eso: ej(1000,).Cronometré el
versus
en 4.6 millones de filas con aproximadamente 70 columnas y descubrió que la ruta NumPy tomó 2 min 16 segundos y el método de comprensión de la lista csv tomó 13 segundos.
Recomendaría el método de comprensión csv-list, ya que probablemente se basa en bibliotecas precompiladas y no en el intérprete tanto como NumPy. Sospecho que el método de los pandas tendría una sobrecarga de intérprete similar.
fuente
También puede probar
recfromcsv()qué puede adivinar los tipos de datos y devolver una matriz de registros con el formato adecuado.fuente
numpy.recfromcsv(fname, delimiter=',', filling_values=numpy.nan, case_sensitive=True, deletechars='', replace_space=' ')Los argumentos clave son los tres últimos.Como probé en ambos sentidos usando NumPy y Pandas, usar pandas tiene muchas ventajas:
Este es mi código de prueba:
test_numpy_csv.py
test_pandas.py
Archivo de datos:
Con NumPy y pandas en las versiones:
fuente
Puede usar este código para enviar datos del archivo CSV a una matriz:
fuente
Utilizando
numpy.loadtxtUn método bastante simple. Pero requiere que todos los elementos sean flotantes (int, etc.)
fuente
Esta es la manera más fácil:
import csv with open('testfile.csv', newline='') as csvfile: data = list(csv.reader(csvfile))Ahora cada entrada en los datos es un registro, representado como una matriz. Entonces tienes una matriz 2D. Me ahorró mucho tiempo.
fuente
Intenté esto:
fuente
Sugeriría usar tablas (
pip3 install tables). Puede guardar su.csvarchivo en.h5pandas (pip3 install pandas),Luego, puede cargar fácilmente sus datos en una matriz NumPy , y con menos tiempo incluso para una gran cantidad de datos .
fuente
Este trabajo como un encanto ...
fuente