Me pregunto si existe una forma directa de importar el contenido de un archivo CSV a una matriz de registros, del mismo modo que las familias read.table()
, read.delim()
y read.csv()
importan datos al marco de datos de R's?
¿O la mejor manera es utilizar csv.reader() y luego aplicar algo como numpy.core.records.fromrecords()
?
Puede utilizar el método genfromtxt()
de Numpy para hacerlo, estableciendo el kwarg delimiter
a una coma.
from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')
Puede encontrar más información sobre la función en su respectiva documentación.
Yo recomendaría la función read_csv
de la biblioteca pandas
:
import pandas as pd
df=pd.read_csv('myfile.csv', sep=',',header=None)
df.values
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
Esto da un DataFrame de pandas - permitiendo muchas funciones útiles de manipulación de datos que no están disponibles directamente con arrays de registros de numpy.
DataFrame es una estructura de datos etiquetada de 2 dimensiones con columnas de potencialmente de diferentes tipos. Puedes pensar en ello como una hoja de cálculo o tabla SQL...
Yo también recomendaría genfromtxt
. Sin embargo, como la pregunta pide un array de registros, en lugar de un array normal, hay que añadir el parámetro dtype=None
a la llamada genfromtxt
:
Dado un archivo de entrada, miarchivo.csv
:
1.0, 2, 3
4, 5.5, 6
import numpy as np
np.genfromtxt('myfile.csv',delimiter=',')
da un array:
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
y
np.genfromtxt('myfile.csv',delimiter=',',dtype=None)
da una matriz de registros:
array([(1.0, 2.0, 3), (4.0, 5.5, 6)],
dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
Esto tiene la ventaja de que se pueden importar fácilmente archivos con múltiples tipos de datos (incluyendo cadenas).