2016-08-28 10 views
5

Mam ramkę danych z 4 kolumnami łańcuchów i innymi jako liczby całkowite. Teraz muszę znaleźć te wiersze danych, w których co najmniej jedna z kolumn ma niezerową wartość (lub> 0).Znajdź wiersze z wartościami niezerowymi w podzbiorze kolumn w ramce danych pandy

manwra,sahAyaH,T7,0,0,0,0,T 
manwra, akriti,T5,0,0,1,0,K 
awma, prabrtih,B6, 0,1,1,0,S 

Moje wyjście powinno być

manwra, akriti,T5,0,0,1,0,K 
awma, prabrtih,B6, 0,1,1,0,S 

Próbowałem następujących czynności, aby uzyskać odpowiedź. Wartości łańcuchów są w kolumnach 0,1,2 i -1 (ostatnia kolumna).

KT[KT.ix[:,3:-2] != 0] 

Co ja otrzymuję jako wyjście jest

NaN,NaNNaN,NaN,NaN,NaN,NaN,NaN 
NaN,NaN,NaN,NaN,NaN,1,NaN,NaN 
NaN,NaN,NaN,NaN,1,1,NaN,NaN 

Jak uzyskać pożądany wynik

Odpowiedz

4

Oto alternatywne rozwiązanie, które wykorzystuje select_dtypes() metody:

In [41]: df[(df.select_dtypes(include=['number']) != 0).any(1)] 
Out[41]: 
     0   1 2 3 4 5 6 7 
1 manwra  akriti T5 0 0 1 0 K 
2 awma prabrtih B6 0 1 1 0 S 

Objaśnienie:

In [42]: df.select_dtypes(include=['number']) != 0 
Out[42]: 
     3  4  5  6 
0 False False False False 
1 False False True False 
2 False True True False 

In [43]: (df.select_dtypes(include=['number']) != 0).any(1) 
Out[43]: 
0 False 
1  True 
2  True 
dtype: bool 
+0

To jest lepsza odpowiedź – piRSquared

+0

@piRSquared, dziękuję! :) – MaxU

4

zakładamy dataframe jest df

df.loc[(df.loc[:, df.dtypes != object] != 0).any(1)] 

enter image description here

+0

@piRSqaured może pochodna to być wykorzystywane do http: //stackoverflow.com/questions/39184442/pandas-dataframe-set-all-string-values-to-nan/39184505#comment65710713_39184505 ... Mam df.ix [:, df.dtypes == obiekt] ... nie mogliśmy zastosować z powrotem do DF .... – Merlin

+0

@Merlin TL; DR Nie sądzę, przynajmniej nie bezpośrednio. Głównym problemem połączonego pytania jest próba przekonwertowania łańcuchów na numeryczne. Byłem wyraźnie ufając, że dtypes są dokładne i nie mają żadnego interesu w konwersji. Jeśli zastosujesz to do połączonego pytania, stracisz punkt konwersji ciągu '" 2.0 "' do float '2.0'. – piRSquared

+0

Dzięki, ok, szukałem zamiennika dla convert_objects (convert_numeric = True) – Merlin

2

Byłaś blisko:

#your's  
KT[KT.ix[:,3:-2] != 0] 

#works 
KT[(KT.ix[:,3:6] > 0).any(1)] 

     0   1 2 3 4 5 6 7 
1 manwra akriti T5 0 0 1 0 K 
2 awma prabrtih B6 0 1 1 0 S 

#key diff 
(KT.ix[:,3:6] > 0) 
     3  4  5  6 
0 False False False False 
1 False False True False 
2 False True True False