Bewertung pandas-Serie werden Werte mit logischen Ausdrücke und if-Anweisungen

Ich habe Probleme bei der Auswertung die Werte aus einem dictionary mit if-Anweisungen.

Angesichts der folgenden Wörterbuch, die ich importiert aus einem dataframe (falls es wichtig ist):

>>> pnl[company]
29:   Active Credit       Date   Debit Strike Type
0      1      0 2013-01-08  2.3265  21.15  Put
1      0      0 2012-11-26      40     80  Put
2      0      0 2012-11-26     400     80  Put

Habe ich versucht zu bewerten, die folgende Anweisung zu etablieren, die den Wert der Letzte Wert des Active:

if pnl[company].tail(1)['Active']==1:
    print 'yay'

Allerdings war ich konfrontiert mit der folgenden Fehlermeldung:

Traceback (most recent call last):
  File "<pyshell#69>", line 1, in <module>
    if pnl[company].tail(1)['Active']==1:
  File "/usr/lib/python2.7/dist-packages/pandas/core/generic.py", line 676, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Überrascht mich, da konnte ich den Wert anzuzeigen, wollte ich mit dem obigen Befehl ohne die if-Anweisung:

>>> pnl[company].tail(1)['Active']
30: 2    0
Name: Active, dtype: object

Gegeben, dass sich der Wert deutlich von null-und der index 2 ist, ich habe versucht, die folgenden für eine kurze Plausibilitätsprüfung und fand, dass die Dinge nicht passiert, wie ich vielleicht erwartet hätte:

>>> if pnl[company]['Active'][2]==0:
...     print 'woo-hoo'
... else:
...     print 'doh'


doh

Meine Frage ist:

1) Was könnte hier Los? Ich vermute, ich bin Missverständnis-Wörterbücher auf einigen grundlegenden Ebene.

2) ich bemerkt, dass ich um jeden möglichen gegebenen Wert dieses Wörterbuchs, die Zahl auf der linken Seite um 1 erhöht. Was stellt dieser dar? Zum Beispiel:

>>> pnl[company].tail(1)['Active']
31: 2    0
Name: Active, dtype: object
>>> pnl[company].tail(1)['Active']
32: 2    0
Name: Active, dtype: object
>>> pnl[company].tail(1)['Active']
33: 2    0
Name: Active, dtype: object
>>> pnl[company].tail(1)['Active']
34: 2    0
Name: Active, dtype: object

Vielen Dank im Voraus für jede Hilfe.

Dies ist nicht eine Frage, über Wörterbücher, aber über Pandas Series Objekte.
Dies scheint, wie etwas bestimmtes zu pandas - Bibliothek, die Sie verwenden. Es scheint, als ob die pandas liefert Objekte, die Art von handeln, wie Wörterbücher, unterscheiden sich aber in wichtigen Punkten. Klar, du bist nicht der Umgang mit den üblichen Python-dictionaries hier, aber verwenden eine Datenstruktur, die zur Verfügung gestellt von pandas, dictionary-ähnliche syntax.
Sie ergeben eine Serie, nicht ein Wörterbuch, als solche nicht bewerten kann deine boolean-Abfrage, wie der Fehler schlage vor, Sie tun müssen pnl[company].tail(1)['Active'].any()==1 obwohl dieser noch einen einzelnen Wert
Mit Bezug auf Ihre zweite Frage, sind Sie verwirrend die Ordnungszahl Ausgabe Nummer? also, wenn Sie gerade wiederholt haben drucken "yay" oder print("Hurra") (für python 3) funktioniert die Nummer noch increment
Die Tatsache, dass Sie immer Fehler wie The truth value of a Series is ambiguous aus der pandas-Bibliothek-source-Dateien.

InformationsquelleAutor neanderslob | 2014-05-04

Schreibe einen Kommentar