2012-09-20 11 views
7

Próbuję odczytać .txt z brakującymi wartościami przy użyciu pandas.read_csv. Moje dane mają format:czytanie pliku z brakującymi wartościami w python pand

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 

z tysiącami próbek o tej samej nazwie punktu, pozycji GPS i innych odczytów. używam kod:

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

kod jest źle jak na_values ​​nie daje NaN lub inny wskaźnik. Kolumny powinny mieć ten sam rozmiar, ale kończę na innej długości.

Nie wiem, co dokładnie powinno być wpisane po na_values ​​(próbowaliśmy wszystkie różne rzeczy). Dzięki

+0

Jeśli "skiprows = 1", w pliku znajduje się pojedynczy wiersz. Bez tego parametru widzę wyraźne 'NaN's w DataFrame. – eumiro

+0

Umieściłem tylko dwa wiersze moich danych, aby pokazać ich format. skiprows = 1 nie robi niczego z brakującymi danymi, w oryginalnym pliku jest 15000 linii, a pierwsze linie zawierają pewne nazwy, czego nie chcę. – tomasz74

+0

Usunąłem 'skiprows = 1' dla jasności – tomasz74

Odpowiedz

11

Parametr na_values musi być "podobny do" (patrz: answer).

Ciąg jest "lista jak" tak:

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

Podobnie:

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

Oznacza to, że trzeba użyć na_values=[''].

+0

Dziękuję za odpowiedź. na_values ​​= [''] było moją pierwszą próbą, ale nie daje pożądanych efektów. Mam taki sam wynik, jeśli biorę argument jako listę [""] lub jako puste miejsce ". ja naprawdę nie wiem, co jeszcze spróbować, jak się wydaje, że nie odbiera automatycznie brakujących wartości i mam problem, aby określić ją – tomasz74

+1

@ tomasz74 Wydaje się pracować dla mnie, ze swoim przykładzie (bez 'skiprows') ... może potrzebujesz 'myData.T' (transpozycja). –

+0

@ tomasz74 Po przetestowaniu wydaje się, że '' 'i z domyślnym ('Brak') to po prostu działa dla mnie dobrze (kolumny są tego samego rozmiaru) ... –

2

W której wersji pandy jesteś? Interpretowanie pustego łańcucha jako NaN jest domyślnym zachowaniem dla pand i wydaje się, że parsowanie pustych ciągów jest w porządku w pliku danych, zarówno w wersji v0.7.3, jak iw bieżącym wzorcu bez stosowania parametru 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