Hoe lees ik CSV-gegevens in een record array in NumPy?

Ik vraag me af of er een directe manier is om de inhoud van een CSV bestand in een record array te importeren, ongeveer op de manier waarop R's read.table(), read.delim(), en read.csv() familie gegevens importeert in R's data frame?

Of is de beste manier om csv.reader() te gebruiken en dan iets als numpy.core.records.fromrecords() toe te passen?

Oplossing

Je kunt Numpy's genfromtxt() methode hiervoor gebruiken, door de delimiter kwarg op een komma te zetten.

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

Meer informatie over de functie is te vinden in zijn respectievelijke documentatie.

Commentaren (6)

Ik zou de [read_csv][1] functie uit de pandas bibliotheek aanraden:

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

Dit geeft een pandas [DataFrame][2] - waardoor [veel handige data manipulatie functies die niet direct beschikbaar zijn met numpy record arrays][3].

DataFrame is een 2-dimensionale gelabelde datastructuur met kolommen van potentieel verschillende types. Je kunt het zien als een spreadsheet of SQL tabel...


Ik zou ook genfromtxt aanraden. Echter, omdat de vraag vraagt om een [record array][4], in tegenstelling tot een normale array, moet de dtype=None parameter worden toegevoegd aan de genfromtxt aanroep:

Gegeven een invoerbestand, myfile.csv:

1.0, 2, 3
4, 5.5, 6

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

geeft een matrix:

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

en

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

geeft een record array:


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

Je kunt ook recfromcsv() proberen, dat datatypes kan raden en een correct geformatteerde record array kan retourneren.

Commentaren (1)