2012-09-20 12 views
7

Provo a leggere .txt con valori mancanti usando pandas.read_csv. I miei dati sono del formato:lettura file con valori mancanti nei panda python

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 migliaia di campioni con lo stesso nome del punto, posizione GPS, e altre letture. Io uso un codice:

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

Il codice è sbagliato, come na_values ​​non dà NaN o altro indicatore. Le colonne dovrebbero avere le stesse dimensioni ma io finisco con una lunghezza diversa.

Non so cosa debba essere digitato esattamente dopo na_values ​​(ha provato tutte le cose diverse). Grazie

+0

Se si 'skiprows = 1', quindi c'è una singola riga nel file. Senza questo parametro vedo chiaramente 'NaN's nel DataFrame. – eumiro

+0

Ho pubblicato solo due righe dei miei dati per mostrare il suo formato. skiprows = 1 non fa nulla con i dati mancanti, in un file originale ci sono 15000 di righe e le prime righe includono alcuni nomi, cosa non voglio. – tomasz74

+0

Ho rimosso 'skiprows = 1' per chiarezza – tomasz74

risposta

11

Il parametro na_values deve essere "simile a" (vedere questo answer).

una stringa è "lista come" così:

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

Allo stesso modo:

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

Questo significa che è necessario utilizzare na_values=[''].

+0

Grazie per la risposta. na_values ​​= [''] è stata la mia prima prova ma non dà gli effetti desiderati. Ho lo stesso risultato se prendo un argomento come lista [''] o come spazio vuoto ''. Io davvero non so cos'altro provare visto che sembra non raccogliere automaticamente i valori mancanti e ho un problema a specificarlo – tomasz74

+1

@ tomasz74 Sembra funzionare per me, con il tuo esempio (senza 'skiprows')) ... forse è necessario 'myData.T' (trasporre). –

+0

@ tomasz74 Dopo aver provato sembra che '''', e con default ('None') questo funziona solo per me bene (le colonne hanno le stesse dimensioni) ... –

2

Quale versione di panda sei? Interpretazione della stringa vuota in quanto NaN è il comportamento predefinito per i panda e sembra analizzare le stringhe vuote nel frammento di dati sia in v0.7.3 che nel master corrente senza utilizzare il parametro 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 
Problemi correlati