Dies ist eine Ausarbeitung auf MaxNoes Antwort, da dies zu lang war, um in den Kommentaren zu enthalten.
Wie er angegeben, wertet df[0] is True
-False
, die dann zu 0
dazu gezwungen wird, die zu einem Spaltennamen entspricht. Was ist das interessant ist, ist , dass, wenn Sie
laufen
>>>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
Diese zunächst etwas verwirrend scheint (zumindest für mich), aber hat damit zu tun, wie pandas
Einsatz von Caching macht. Wenn man sich anschaut, wie df[False]
behoben ist, es aussieht
/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)
Da cache
nur ein ganz normaler Python ist dict
, nach dem Ausführen df[0]
der cache
sieht aus wie
>>>cache
{0: 0 True
1 False
2 True
Name: 0, dtype: bool}
so, dass, wenn wir aufschauen False
, erzwingt Python dies zu 0
. Wenn wir nicht bereits den Cache grundiert df[0]
verwenden, dann res
None
ist, die eine KeyError
auf Leitung 1345 von generic.py
löst
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)
„Okay, aber die PEP8 Stil falsch zu sein scheint, heißt es: E712 Der Vergleich zu True sollte erfolgen, wenn cond True oder if cond. ist. WTF? PEP8 sagt eigentlich "Ja:' wenn Begrüßung ", Nein:' wenn Begrüßung == Wahr ', Schlechter 'wenn Begrüßung Wahr ist". –
Ist 'df [df [0]] 'in keinem Fall vorzuziehen? – IanS
@IanS Es mag sein (nicht als lesbare IMO), aber die Frage ist nicht etwa: ^) "Was ist der Unterschied zwischen einem klugen Mann und einem weisen Mann? - Ein kluger Mann kommt aus allen Schwierigkeiten mit Bravour, a Der weise Mann bekommt es nicht. –