Questa è un'elaborazione sulla risposta di MaxNoe poiché era troppo lungo per includere nei commenti.
Mentre indicato, df[0] is True
viene valutato come False
, che poi è costretto a 0
che corrisponde ad un nome di colonna. Ciò che è interessante di questo è che se si esegue
>>>df = pd.DataFrame([True, False, True])
>>>df[False]
KeyError Traceback (most recent call last)
<ipython-input-21-62b48754461f> in <module>()
----> 1 df[False]
>>>df[0]
0 True
1 False
2 True
Name: 0, dtype: bool
>>>df[False]
0 True
1 False
2 True
Name: 0, dtype: bool
Questo sembra un po 'perplessi in un primo momento (almeno per me), ma ha a che fare con il modo in pandas
fa uso di caching. Se si guarda a come df[False]
si risolve, è sembra
/home/matthew/anaconda/lib/python2.7/site-packages/pandas/core/frame.py(1975)__getitem__()
-> return self._getitem_column(key)
/home/matthew/anaconda/lib/python2.7/site-packages/pandas/core/frame.py(1999)_getitem_column()
-> return self._get_item_cache(key)
> /home/matthew/anaconda/lib/python2.7/site-packages/pandas/core/generic.py(1343)_get_item_cache()
-> res = cache.get(item)
Dal cache
è solo un pitone regolare dict
, dopo l'esecuzione df[0]
il cache
assomiglia
>>>cache
{0: 0 True
1 False
2 True
Name: 0, dtype: bool}
in modo che quando guardiamo in alto False
, python lo costringe a 0
. Se non abbiamo già innescato la cache utilizzando df[0]
, quindi res
è None
che innesca un KeyError
on line 1345 di generic.py
def _get_item_cache(self, item):
1341 """Return the cached item, item represents a label indexer."""
1342 cache = self._item_cache
1343 -> res = cache.get(item)
1344 if res is None:
1345 values = self._data.get(item)
"Va bene, ma lo stile PEP8 sembra essere sbagliato, si dice: E712 il confronto con True dovrebbe essere se cond è True o se cond. ". WTF? PEP8 in realtà dice "Sì:' se saluta', No: 'se saluto == True', Peggio' se il saluto è True' ". –
Non è preferibile 'df [df [0]]' in ogni caso? – IanS
@IanS Può essere (non come leggibile IMO), ma la domanda non è su questo: ^) "Qual è la differenza tra un uomo intelligente e un uomo saggio? - Un uomo intelligente esce dai guai con i colori volanti, un l'uomo saggio non ottiene _into_ it. " –