2017-03-06 5 views
2

Ich versuche, alle Zeilen aus dem Datenrahmen contributors zu bekommen, wo Besatzung im Ruhestand ist, etwa so:Pandas - Auswählen von Zeilen in einem Datenrahmen mit String Gleichheit

mask = (contributors.contbr_occupation.str == 'RETIRED') 
print(contributors[mask]) 

Allerdings hat ich die folgenden Stack-Trace erhalten:

Traceback (most recent call last): 
    File "C:\Users\Me\Anaconda3\envs\pandas\lib\site-packages\pandas\indexes\base.py", line 2134, in get_loc 
    return self._engine.get_loc(key) 
    File "pandas\index.pyx", line 132, in pandas.index.IndexEngine.get_loc (pandas\index.c:4433) 
    File "pandas\index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas\index.c:4279) 
    File "pandas\src\hashtable_class_helper.pxi", line 732, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:13742) 
    File "pandas\src\hashtable_class_helper.pxi", line 740, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:13696) 
KeyError: False 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "census_attack.py", line 27, in <module> 
    print(contributors[mask]) 
    File "C:\Users\Me\Anaconda3\envs\pandas\lib\site-packages\pandas\core\frame.py", line 2059, in __getitem__ 
    return self._getitem_column(key) 
    File "C:\Users\Me\Anaconda3\envs\pandas\lib\site-packages\pandas\core\frame.py", line 2066, in _getitem_column 
    return self._get_item_cache(key) 
    File "C:\Users\Me\Anaconda3\envs\pandas\lib\site-packages\pandas\core\generic.py", line 1386, in _get_item_cache 
    values = self._data.get(item) 
    File "C:\Users\Me\Anaconda3\envs\pandas\lib\site-packages\pandas\core\internals.py", line 3543, in get 
    loc = self.items.get_loc(item) 
    File "C:\Users\Me\Anaconda3\envs\pandas\lib\site-packages\pandas\indexes\base.py", line 2136, in get_loc 
    return self._engine.get_loc(self._maybe_cast_indexer(key)) 
    File "pandas\index.pyx", line 132, in pandas.index.IndexEngine.get_loc (pandas\index.c:4433) 
    File "pandas\index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas\index.c:4279) 
    File "pandas\src\hashtable_class_helper.pxi", line 732, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:13742) 
    File "pandas\src\hashtable_class_helper.pxi", line 740, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:13696) 
KeyError: False 

Wie kann ich das tun?

Antwort

1

Wenn Sie nur eine echte Gleichheit Prüfung (nicht Eindämmen oder etwas ähnliches) durchgeführt wird, verwenden Sie nicht die str Accessor - Sie brauchen es nicht.

mask = (contributors.contbr_occupation == 'RETIRED') 

Beispiel

>>> df 

    strings 
0  abc 
1  def 
2  ghi 
3  abc 

>>> df[df.strings == 'abc'] 

    strings 
0  abc 
3  abc 

Wenn Sie das tun einige logische Bedingung wie Eindämmung benötigen, tatsächlich einen String-Methode auf dem mit str.contains zum Beispiel str Accessor, rufen

mask = (contributors.contbr_occupation.str.contains('RETIRED')) 
2

Sie könnten Verwenden Sie query

contributors.query('contbr_occupation == "RETIRED"') 
+0

Ja, wenn sich die Dinge beruhigen, kann ich wieder in einen Rhythmus kommen. – piRSquared

Verwandte Themen