2017-02-03 7 views
1

Ich habe ein Problem mit Pandas 19.2 gibt mir das Ergebnis, das ich erwarte. Die Spalten a-g haben ['ja', 'nein', '', NaN]. Wenn eine dieser Spalten 'Ja' hat, möchte ich die Zeile zurückgeben (es gibt andere Spalten, die nicht gezeigt werden). Hier ist mein Code.Pandas logische Operation

xdf2 = xdf[((xdf['a'] == 'yes').all() or 
        (xdf['b'] == 'yes').all() or 
        (xdf['c'] == 'yes').all() or 
        (xdf['d'] == 'yes').all() or 
        (xdf['e'] == 'yes').all() or 
        (xdf['f'] == 'yes').all() or 
        (xdf['g'] =='yes').all()) ] 

Das gibt mir die folgende Fehlermeldung:

2134     return self._engine.get_loc(key) 
    2135    except KeyError: 
-> 2136     return self._engine.get_loc(self._maybe_cast_indexer(key)) 
    2137 
    2138   indexer = self.get_indexer([key], method=method, tolerance=tolerance) 

pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4433)() 

pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4279)() 

pandas\src\hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:13742)() 

pandas\src\hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:13696)() 

KeyError: False 

Ohne die '.all' ich

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

Dies scheint eine einfache und gemeinsame Code-Schnipsel, aber ich haven‘ Ich habe ein gutes Beispiel gefunden. Was vermisse ich?

+1

Ein einfaches xdf2 = xdf [(xdf [ 'a'] == 'ja') | (xdf ['b'] == 'ja') | (xdf ['c'] == 'ja') | (xdf ['d'] == 'ja')] würde funktionieren. Der Operator oder ist | – Vaishali

Antwort

5

Versuchen

xdf[xdf[list('abcdefg')].eq('yes').any(1)] 
+0

War nicht bewusst von .eq() +1! – Vaishali

+0

'xdf [xdf.ix [:, a ':' g ']. Eq (' ja '). Beliebig (1)]'; nur ein bisschen kompakter. – Abdou

+0

Die Überschriften wurden vereinfacht. Der endgültige Code hat sich folgendermaßen ausgearbeitet: xdf [xdf [Liste (xdf.filter (regex = 'pii *'))]. Eq ('ja') any (1)]. To_csv ('pii.csv') Danke für die Hilfe! – Harvey

0

Die folgenden sollte funktionieren:

import pandas as pd 

a = [["yes", "no", "yes", "yes"], 
    ["yes", "yes", "no", "yes"], 
    ["yes", "no", "yes", "yes"]] 
xdf = pd.DataFrame(a, columns=["a", "b", "c", "d"])  
print xdf 

boollist = [ (xdf[col] == "yes").all() for col in xdf.columns ] 
xdf2 = xdf[xdf.columns[boollist] ] 
print xdf2 
Verwandte Themen