Wahrscheinlich Built-in

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ghanda11
User
Beiträge: 5
Registriert: Donnerstag 14. Oktober 2021, 10:14

Moin zusammen,

ich sitze gerade an der Auswertung von meinen Daten und habe ein kleines Problem. Es ist wahrscheinlich nichts schweres. Ich weiss aber nicht wirklich, wie ich das fuer eine Google Frage formulieren soll.
Daher befrage ich hier die Schwarmintelligenz.

Ich habe einen Subplot mit den Daten meiner 4 Channel. Nun frage ich den Nutzer, ob er in einen der Channel reinzoomen will. Soweit, so einfach. Wenn ich jetzt aber den neuen Graphen mit dem entsprechenden Channel anzeigen will, mag das Python mit meinem Code nicht.

(...)
n = int(input())

if n < 5 :
p = '%(position)s' % {'position': 'g' + str(n)}
fig, ax = plt.subplots(figsize=(6, 6))
ax.plot(df["Time"], df["Voltage" + str(n)], color='darkturquoise')
ax.set_xlim(df.iloc[p]["Time"]-(4/12), df.iloc[p]["Time"]+(4/12))
(...)

Da .iloc nur Integer als Eingabe akzeptiert und p klar ein str ist, mag er das nicht, obwohl (vorher definiert) g1-4 Integer sind und mit der gezeigten Methode p=g1-4 ist.
ich habe es schon mit diversen anderen Ansaetzen probiert, aber es will einfach nicht funktionieren die eingegebene Zahl n als Zusatz zu g in den .iloc zu schreiben, sodass Python meine vorher definierte Variable erkennt.

Hat da jemand vielleicht eine Idee?

Vielen Dank!
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ghanda11: Also erst einmal ist die Definition von `p` unsinnig kompliziert. Der Ausdruck ``p = "%(position)s" % {"position": "g" + str(n)}`` ist letztendlich äquivalent zu ``p = "g" + str(n)``. Den ``%``-Operator zur Zeichenkettenformatierung würde man in neuem Code auch nicht mehr benutzen. Selbst in älterem Code wäre das die `format()`-Methode auf Zeichenketten, aber in aktuellem Code einfach ein f-Zeichenkettenliteral: ``p = f"g{n}"``. Zusammenstückeln von Zeichenkettenliteralen und Werten mittels ``+`` und `str()` ist eher BASIC als Python.

Man nummeriert keine Namen. Dann will man sich entweder bessere Namen überlegen, oder gar keine einzelnen Werte, sondern eine Datenstruktur verwenden. Oft eine Liste. So auch hier. Pack die Werte in eine Liste und schon kannst Du `n` oder `n-1` einfach als Index in diese Liste verwenden.

Code: Alles auswählen

    n = int(input())

    if n < 5:
        fig, ax = plt.subplots(figsize=(6, 6))
        ax.plot(df["Time"], df[f"Voltage{n}"], color="darkturquoise")
        value = df.iloc[g[n - 1]]["Time"]
        offset = 4 / 12
        ax.set_xlim(value - offset, value + offset)
Ein besserer Name als `g` wäre vielleicht auch nicht schlecht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ghanda11
User
Beiträge: 5
Registriert: Donnerstag 14. Oktober 2021, 10:14

Danke schonmal!

Das mit dem zusammenstueckeln so wie du es mir hier geschrieben hast hatte ich auch alles gemacht, hatte aber auch nicht geklappt, deshalb diese unnoetig komlizierte Variante, die einfach meine Letzte war, bevor ich mich hier ans Forum gewandt habe.

Das mit der Liste ist eine tolle Idee. Da hatte ich nicht dran gedacht. An Effizienz und Variablen-Bennenung muss ich auf jeden Fall noch arbeiten.
Vielen Dank.
Antworten