2012-05-21 8 views
8

que quiero leer datos de un archivo que tiene muchos valores que faltan, como en este ejemplo:La lectura de datos de archivo de texto con los valores que faltan

1,2,3,4,5 
6,,,7,8 
,,9,10,11 

estoy usando la función numpy.loadtxt:

data = numpy.loadtxt('test.data', delimiter=',') 

El problema es que los valores faltantes rompen loadtxt (obtengo un "ValueError: no se pudo convertir la cadena en float:", sin duda debido a los dos o más delimitadores consecutivos).

¿Hay alguna manera de hacer esto automáticamente, con loadtxt u otra función, o tengo que morder la viñeta y analizar cada línea manualmente?

Respuesta

12

probablemente me utilizo genfromtxt:

>>> from numpy import genfromtxt 
>>> genfromtxt("missing1.dat", delimiter=",") 
array([[ 1., 2., 3., 4., 5.], 
     [ 6., nan, nan, 7., 8.], 
     [ nan, nan, 9., 10., 11.]]) 

y luego hacer lo que con los panes Nan (cambiarlos a algo, en lugar de usar una máscara, etc.) Algo de esto se podría hacer en línea:

>>> genfromtxt("missing1.dat", delimiter=",", filling_values=99) 
array([[ 1., 2., 3., 4., 5.], 
     [ 6., 99., 99., 7., 8.], 
     [ 99., 99., 9., 10., 11.]]) 
+0

Niza, muchas gracias! Exactamente lo que estaba buscando. – Cristina

0

Tenga en cuenta que para esto, de acuerdo con mi prueba, las células de caracter no se detectan, solo los valores numéricos, por lo que si tiene una tabla con cadenas y números debe haber alguna otra manera.

Mi ejemplo:

upeak_names.txt: 
id name Distance name2 Distance2 name3 Distance3 
upeak-3 NOC2L -161 KLHL17 -1135 NOC2L -162 

>>>table= genfromtxt('upeak_names.txt', delimiter="\t") 
>>>comb_table[2,] 
>>>array([ nan, nan, -161., nan, -1135., nan, -162.]) 
Cuestiones relacionadas