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
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
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.
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', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
Cette méthode présente l'avantage de pouvoir importer facilement des fichiers contenant [plusieurs types de données (y compris des chaînes de caractères)][5].
[1] : http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html [2] : http://pandas.pydata.org/pandas-docs/dev/dsintro.html#dataframe
[4] : http://docs.scipy.org/doc/numpy/user/basics.rec.html [5] : https://stackoverflow.com/a/15481761