2013-08-21 10 views
7

Mam paczkę datagraf pandy utworzoną z pliku csv. Jedna kolumna tej ramki danych zawiera dane liczbowe, które początkowo są przesyłane jako ciąg. Większość wpisów ma charakter numeryczny, ale niektóre zawierają różne kody błędów, które nie są numeryczne. Nie wiem z góry, jakie mogą być wszystkie kody błędów lub ile ich jest. Tak więc, na przykład, dataframe może wyglądać następująco:Czy istnieje metoda, aby pominąć nieprzyłączalne wiersze podczas rzucania serii pand z str do float?

[In 1]: df 
[Out 1]: 
      data  OtherAttr 
MyIndex 
0   1.4  aaa 
1   error1  foo 
2   2.2  bar 
3   0.8  bar 
4   xxx  bbb 
... 
743733  BadData ccc 
743734  7.1  foo 

chcę rzucać df.data jako pływaka i wyrzucić wszystkie wartości, które nie przekształcają prawidłowo. Czy jest w tym wbudowana funkcja? Coś jak:

df.data = df.data.astype(float, skipbad = True) 

(choć wiem, że specjalnie nie będzie działać i nie widzę żadnych kwargs ciągu astype że robić to, co chcę)

Chyba mogę napisać funkcję, a następnie przy użyciu try używaj pandy apply lub map, ale to wydaje się być nieeleganckim rozwiązaniem. To musi być dość powszechny problem, prawda?

Odpowiedz

3

Użyj metody convert_objects który "próbuje wywnioskować lepszą dtype dla kolumn obiektów":

In [11]: df['data'].convert_objects(convert_numeric=True) 
Out[11]: 
0 1.4 
1 NaN 
2 2.2 
3 0.8 
4 NaN 
Name: data, dtype: float64 

W rzeczywistości, można zastosować to do całego DataFrame:

In [12]: df.convert_objects(convert_numeric=True) 
Out[12]: 
     data OtherAttr 
MyIndex     
0   1.4  aaa 
1   NaN  foo 
2   2.2  bar 
3   0.8  bar 
4   NaN  bbb 
+1

Dzięki za odpowiedź, właśnie tego szukałem. Jeden mniejszy punkt kontrolny: jeśli masz już mieszankę typów już w kolumnie (niektóre zmiennoprzecinkowe, niektóre ciągi znaków), to 'convert_objects' zakończy się bezgłośnie. Oczywiście rozsądną odpowiedzią na to jest "nie mieszaj typów obiektów w jednej kolumnie!" – user2543645

+1

_ "FutureWarning: convert_objects jest przestarzałe. Użyj konwerterów danych typ danych pd.to_datetime, pd.to_timedelta i pd.to_numeric." _ – xtian

Powiązane problemy