2012-09-20 12 views
7

Intento leer .txt con valores perdidos usando pandas.read_csv. Mis datos son del formato:leyendo el archivo con valores perdidos en Python pandas

10/08/2012,12:10:10,name1,0.81,4.02,50;18.5701400N,4;07.7693770E,7.92,10.50,0.0106,4.30,0.0301 
10/08/2012,12:10:11,name2,,,,,10.87,1.40,0.0099,9.70,0.0686 

con miles de muestras con el mismo nombre del punto, posición GPS, y otras lecturas. utilizo un código:

myData = read_csv('~/data.txt', sep=',', na_values='') 

El código es incorrecto como na_values ​​no da NaN u otro indicador. Las columnas deben tener el mismo tamaño pero termino con diferente longitud.

No sé exactamente qué se debe escribir después de na_values ​​(si se probaron todas las cosas). Gracias

+0

Si 'skiprows = 1', entonces hay una sola línea en el archivo. Sin ese parámetro veo claramente 'NaN's en el DataFrame. – eumiro

+0

Publiqué solo dos líneas de mis datos para mostrar su formato. skiprows = 1 no hace nada con los datos faltantes, en un archivo original hay 15000 líneas y las primeras líneas incluyen algunos nombres, lo que no quiero. – tomasz74

+0

Quité 'skiprows = 1' para mayor claridad – tomasz74

Respuesta

11

El parámetro na_values debe ser "similar a la lista" (consulte este answer).

Una cadena es "lista como" modo:

na_values='abc' # would transform the letters 'a', 'b' and 'c' each into `nan` 
# is equivalent to 
na_values=['a','b','c']` 

mismo modo:

na_values='' 
# is equivalent to 
na_values=[] # and this is not what you want! 

Esto significa que es necesario utilizar na_values=[''].

+0

Gracias por su respuesta. na_values ​​= [''] fue mi primer intento, pero no da los efectos deseados. Tengo el mismo resultado si tomo un argumento como una lista [''] o como un espacio vacío ''. Realmente no sé qué más probar, ya que parece que no recoge automáticamente los valores faltantes y tengo un problema para especificarlo – tomasz74

+1

@ tomasz74 Parece que funciona para mí, con su ejemplo (sin los 'skiprows') ... quizás necesites 'myData.T' (transponer). –

+0

@ tomasz74 Después de la prueba, parece que '''', y con el valor predeterminado ('Ninguno'), esto funciona bien para mí (las columnas son del mismo tamaño) ... –

2

¿En qué versión de pandas está usted? Interpretar cadena vacía como NaN es el comportamiento predeterminado para pandas y parece analizar bien las cadenas vacías en su fragmento de datos tanto en v0.7.3 como en el maestro actual sin usar el parámetro na_values.

In [10]: data = """\ 
10/08/2012,12:10:10,name1,0.81,4.02,50;18.5701400N,4;07.7693770E,7.92,10.50,0.0106,4.30,0.0301 
10/08/2012,12:10:11,name2,,,,,10.87,1.40,0.0099,9.70,0.0686 
""" 

In [11]: read_csv(StringIO(data), header=None).T 
Out[11]: 
        0   1 
X.1  10/08/2012 10/08/2012 
X.2   12:10:10 12:10:11 
X.3   name1  name2 
X.4    0.81   NaN 
X.5    4.02   NaN 
X.6 50;18.5701400N   NaN 
X.7 4;07.7693770E   NaN 
X.8    7.92  10.87 
X.9    10.5   1.4 
X.10   0.0106  0.0099 
X.11    4.3   9.7 
X.12   0.0301  0.0686 
Cuestiones relacionadas