Comment lire des données CSV dans un tableau d'enregistrements en NumPy ?

Je me demande s'il existe un moyen direct d'importer le contenu d'un fichier CSV dans un tableau d'enregistrements, de la même manière que la famille read.table(), read.delim(), et read.csv() importe des données dans le cadre de données de R's ?

Ou bien la meilleure façon d'utiliser [csv.reader()][1] et d'appliquer ensuite quelque chose comme numpy.core.records.fromrecords() ?

[1] : https://stackoverflow.com/questions/2859404/reading-csv-files-in-scipy-numpy-in-python

Solution

Vous pouvez utiliser la méthode genfromtxt() de Numpy pour le faire, en mettant le kwarg delimiter à une virgule.

from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')

Vous trouverez plus d'informations sur la fonction dans sa [documentation][1] respective.

[1] : http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

Commentaires (6)

Je recommande la fonction [read_csv][1] de la bibliothèque pandas :

import pandas as pd
df=pd.read_csv('myfile.csv', sep=',',header=None)
df.values
array([[ 1. ,  2. ,  3. ],
       [ 4. ,  5.5,  6. ]])

Cela donne un [DataFrame][2] pandas - permettant [de nombreuses fonctions utiles de manipulation de données qui ne sont pas directement disponibles avec les tableaux d'enregistrements numpy][3].

DataFrame est une structure de données étiquetée bidimensionnelle avec des colonnes de types potentiellement différents. types potentiellement différents. Vous pouvez l'imaginer comme une feuille de calcul ou table SQL...


Je recommande également genfromtxt. Cependant, puisque la question demande un [record array][4], par opposition à un tableau normal, le paramètre dtype=None doit être ajouté à l'appel genfromtxt :

Étant donné un fichier d'entrée, myfile.csv :

1.0, 2, 3
4, 5.5, 6

import numpy as np
np.genfromtxt('myfile.csv',delimiter=',')

donne un tableau :

array([[ 1. ,  2. ,  3. ],
       [ 4. ,  5.5,  6. ]])

et

np.genfromtxt('myfile.csv',delimiter=',',dtype=None)

donne un tableau d'enregistrements :


array([(1.0, 2.0, 3), (4.0, 5.5, 6)], 
      dtype=[('f0', '
Commentaires (3)

Vous pouvez aussi essayer recfromcsv() qui peut deviner les types de données et retourner un tableau d'enregistrement correctement formaté.

Commentaires (1)