Comment faire pour forcer genfromtxt lire csv comme tableau d'enregistrements?
-
23-12-2019 - |
Question
Je suis en train de lire CSV avec la ligne suivante:
raw_data = genfromtxt(datafile,delimiter='\t',dtype=None)
OK, cette fonction lit ce fichier dans le Tableau d'enregistrements lorsqu'il réunit les données de chaîne dans le fichier de données.comme je le comprends, quand dtype est rien, le fichier doit être lu dans le Tableau d'enregistrements de trop.Est-ce exact?
Cependant, si il n'y a pas de données de chaîne et seulement numérique est présenté, cette fonction lit les données dans ndarray.
Si non, est-il un moyen pratique pour forcer cette fonction de lecture de fichier en tant que tableau d'enregistrements?
Le problème avec ndarray est que tout mon code est intégré dans la commande de processus d'enregistrement des tableaux.
UPD1 Juste au cas où quelqu'un va essayer de le faire, voici une petite solution.Peut-être c'est pas le meilleur, mais au moins il fonctionne:
Lire le fichier csv comme un ndarray
raw_data = genfromtxt(datafile,delimiter='\t',dtype=None)
Générer des noms par défaut et les types de données des colonnes:
names_=['f'+str(i) for i in range(raw_data.shape[1])];
names=[(name,raw_data.dtype) for name in names_];
Et enfin, pour créer un enregistrement de tableau:
raw_data_as_ra = raw_data.ravel().view(names);
La solution
Vous pouvez utiliser recfromcsv
, qui est dérivé de genfromtxt, au lieu:
Si votre fichier ressemble à ceci:
col1,col2,col3
1.1, 2.4, 3.2
4.1, 5.2, 6.3
Ensuite ce faire
a = np.recfromcsv('yourfile.csv')
donne:
rec.array([(1.1, 2.4, 3.2), (4.1, 5.2, 6.3)],
dtype=[('col1', '<f8'), ('col2', '<f8'), ('col3', '<f8')])
Notez que recfromcsv
utilise la première ligne sous forme de colonne/enregistrement de noms.
Aussi, vous pouvez utiliser les mêmes paramètres d'entrée comme genfromtxt
(par ex.l' delimiter
paramètre).Votre ligne de code pourrait ressembler à ceci si votre fichier est séparé par des tabulations:
np.recfromcsv(datafile,delimiter='\t'))