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?
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.
Ik zou de read_csv
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 - waardoor veel handige data manipulatie functies die niet direct beschikbaar zijn met numpy record arrays.
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, 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', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
Dit heeft het voordeel dat bestanden met meerdere gegevenstypen (waaronder strings) gemakkelijk kunnen worden geïmporteerd.