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);
Était-ce utile?

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'))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top