2010-07-20 7 views
1

J'ai un fichier avec un horodatage en tant que colonne, et des nombres dans tous les autres. Je peux charger l'un ou l'autre correctement, mais pas les deux. Frustrant le diable hors de moi ...chargement de données à l'aide de Numpy.genfromtxt avec plusieurs formats

C'est ce que je fais:

import numpy as np 

file = np.genfromtxt('myfile.dat', skip_header = 1, usecols = (0,1,2,3), dtype = (str, float), delimiter = '\t') 

Donc la colonne 0 est l'horodatage, et je veux le lire en tant que chaîne. Le reste je veux lire en tant que flotteurs. Est-ce que quelqu'un sait comment faire ça? J'ai essayé de tromper avec des noms et des dtypes, mais je ne peux rien faire pour travailler.

Merci.

Répondre

3

Peut-être essayer ceci:

import numpy as np 

data = np.genfromtxt('myfile.dat', 
        skiprows=1, 
        usecols = (0,1,2,3), 
        dtype = '|S10,<f8,<f8,<f8', 
        delimiter = '\t') 
print(data) 
# [('2010-1-1', 1.2, 2.2999999999999998, 3.3999999999999999) 
# ('2010-2-1', 4.5, 5.5999999999999996, 6.7000000000000002)] 

print(data.dtype) 
# [('f0', '|S10'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8')] 

print(data.shape) 
# (2,) 
2

Si j'ai un fichier délimité par des tabulations qui ressemble à:

# Header Stuff 
12:53:16 1.1111 2.2222 3.3333 4.4444 
12:53:17 5.5555 6.6666 7.7777 8.8888 
12:53:18 9.9999 10.0000 11.1111 12.1212 

Je pense que vous pouvez obtenir ce que vous cherchez soit en spécifiant le DTYPE comme Aucun (si numpy choisit les dtypes pour vous):

file = np.genfromtxt('myfile.dat', skip_header = 1, usecols = (0,1,2,3,4),\ 
         dtype = None, delimiter = '\t') 

ou vous pouvez définir les dtypes explicitement:

file = np.genfromtxt('myfile.dat', skip_header = 1, usecols = (0,1,2,3,4), \ 
        dtype=[('mytime','S8'),('myfloat1','f8'),('myfloat2','f8'),('myfloat3','f8')], \ 
        delimiter = '\t')