2016-11-18 2 views
0

Ich versuche zu ersetzen alle Werte in einer Pandas Datenrahmen Spalte df.column_A, wenn sie bis 10. im Bereich von 1 fallenWie ändert man bestimmte Zellenwerte in einer Pandas-Datenrahmenspaltenreihe basierend auf mehreren Bedingungen?

Allerdings, wenn ich tun:

df.loc[(1 < df.column_A < 10), "Column_A"] = 1,

Ich gebe nach:

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

, wenn ich das tue:

df.loc[(df.column_A < 10) & (df.column_A > 1), "df.column_A"] = 1,

ich keinen Fehler ergibt überhaupt, aber die Werte nicht ersetzt bekommen.

Seltsam ist, dass, wenn ich tun:

df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1,

alle Werte in df.column_A mit 1 ersetzt bekommen, wie ich erwarten würde.

Das bedeutet, dass die Syntax der Zeile korrekt ist, daher muss der Fehler auf einige Faktoren zurückzuführen sein, die ich nicht verstehe.

Was mache ich falsch?

Antwort

1

Es ist ein einfaches Problem. .loc nimmt Indexetiketten oder boolesche Liste/Serie. So wird diese Arbeit:

df.loc[(df.column_A < 10) & (df.column_A > 1), "column_A"] = 1 

Bitte beachte, dass ich df. aus dem Spaltenindex Ort entfernt.


df.loc[(1 < df.column_A < 10), "Column_A"] = 1 

Wird nicht funktionieren, weil die Operation (1 < df.column_A < 10) logisch erscheint, sondern versucht, die ganze Serie zu einem Wert zu kollabieren. Und da es nicht weiß, ob Sie eine and, or oder eine andere Kombination möchten, wird dieser Fehler ausgelöst.

Sollte auch nicht funktionieren, weil Sie die Spalten nicht korrekt referenzieren. Es ist lustig, dass Sie keine Fehler bekommen. Vielleicht haben Sie früher etwas in Ihrem Programm getan, das Sie rettet ...

Verwandte Themen