Zum Plotten definiere ich Farben basierend auf einer Bedingung (die Bedingungen sind einige Werte in bestimmten Spalten eines Pandas Datenrahmens). Jetzt bin ich mir nicht sicher, ob ich bei der Definition der Funktion einen Fehler mache. Die Funktion ist wie folgt:"UnboundLocalError: lokale Variable referenziert vor Zuweisung" beim Aufruf einer Funktion
def getColour(C, threshold):
neg = 0 - threshold
half = threshold/2
if C <= (neg - half):
clr = '#2b83ba'
if ((neg - half) < C <= neg):
clr = '#abdda4'
if ((threshold + half) > C >= threshold):
clr = '#fdae61'
if (C > (threshold + half)):
clr = '#d7191c'
return clr
Und das ist, wie ich es umsetzen: Ich durch Zeilen eines Datenrahmens durchlaufen, dann finden Spalten eine Bedingung erfüllt, die Indizes aus diesen Spalten verwenden, um Parameter aus einer Liste, Wenden Sie eine andere Funktion an, die die Ergebnisse generiert (diese Funktion funktioniert, das Skript wurde getestet und funktionierte ordnungsgemäß, wenn ich eine feste Farbe für das Plotten festlegte) und dann die Ergebnisse mit einer anderen Farbe plotten.
for index, row in Sparse.iterrows():
lim = row[row.notnull()]
ci = [row.index.get_loc(x) for x in lim.index]
params = np.array(myList)[ci]
for i, w in enumerate(params):
w = w.tolist()
print w, w[2]
print ci[i]
colour = getColour(ci[i], threshold)
x, y = myFunction(w)
plt.plot(x,y, color=colour,linestyle='-',linewidth=1.5)
Aber das wirft einen Fehler UnboundLocalError: local variable 'clr' referenced before assignment
auf der Linie colour = getColour(ci[i], threshold)
.
Ich habe andere Beiträge zu diesem Fehler gelesen, aber ich kann nicht sehen, was mein Problem ist.
I keine Ihrer Bedingungen vermuten, sind zu erhalten und 'clr' wird nie zugewiesen, so w Wenn Sie versuchen, "clr" zurückzugeben, erhalten Sie den Fehler. –
Der wahrscheinlichste Grund für Ihren Fehler ist, dass keine Ihrer 'if'-Anweisungen' True 'getestet wurde, also wurde 'clr' nie definiert. Das bedeutet, dass Sie versucht haben, eine Variable vor ihrer Zuweisung zu verwenden, indem Sie 'return clr' ausführen. Eine einfache Lösung wäre es, 'clr' einen Standardwert wie' None', _before_ Ihre 'if' Anweisungen zu geben. –
Ich sehe, du hast Recht! Ich habe die erste Version hinzugefügt und die Werte korrigiert, aber jetzt bekomme ich 'ValueError: Der Wahrheitswert einer Serie ist mehrdeutig. Benutze a.empty, a.bool(), a.item(), a.any() oder a.all(). ' – durbachit