Schleife mit and Bedingung

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
itzhalpepe
User
Beiträge: 3
Registriert: Montag 4. Juni 2018, 11:35

Guten Tag,
ich habe meine Modularbeit nun fast fertig und benötige bei einem Code noch Hilfe, weil ich dort nicht wirklich eine Lösung finde:

Ich habe einen Dataframe mit einem Zeitstempel und 2 Spalten, eine Spalte ist die Windgeschwindigkeit und eine für den Niederschlag. Ich will nun alle Zeilen ausgelesen haben, bei welchem die Windgeschwindigkeit größer als 6 ist und der Niederschlag kleiner als 0,05.

Meine Idee war:

for i in TabelleWindundNiederschlag:
if 'Niederschläge'<0.1 and 'Windgeschwindigkeit'>6:
print()

Aber dann kommt die Fehlermeldung: File "<ipython-input-77-db6a21034ed0>", line 2, in <module>
if 'Niederschläge'<0.1 and 'Windgeschwindigkeit'>6:

TypeError: '<' not supported between instances of 'str' and 'float'

Ich hoffe, es kann schnell geholfen werden mit einem Tipp.
Benutzeravatar
__blackjack__
User
Beiträge: 13146
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Die Fehlermeldung ist ja recht eindeutig. Die Zeichenkette 'Niederschläge' kann nicht mit der Gleitkommazahl 0.1 mit ``<`` verglichen werden. Macht ja auch wenig Sinn.

Du brauchst da ziemlich wahrscheinlich keine Schleife, denn in dem Beispiel verwendest Du `i` ja auch gar nicht. Stattdessen könntest Du die Spalten (`Series`) mit 0.1 bzw. 6 vergleichen, die beiden Ergebnisse `&`-Verknüpfen, und als Index in den `DataFrame` verwenden.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Bitte deinen Code hier in Python-Tags pasten, bestenfalls auch noch deine zugrunde liegende Liste, ich tue mich mit so imaginären Dingen eher schwer :-)

Die Fehlermeldung ist eindeutig, du versuchst anscheinend irgendwo einen str-Datentyp mit einem float-Datentyp zu vergleichen, was nicht funktionieren kann. Auch deine Itereation mit anschließender if-Bedingung wird Probleme bereiten, da nur `i` als Inhalt der Tabelle zur Verfügung steht, also eine ganze Zeile deiner Tabelle, nicht aber die einzelnen Werte daraus. Was du also tun musst ist die Werte aus `i` *herausnehmen* und dann mit den Schwellwerten vergleichen.
When we say computer, we mean the electronic computer.
Benutzeravatar
__blackjack__
User
Beiträge: 13146
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sls: Es liegt ein „Dataframe” vor, was ich mal als `pandas.DataFrame` interpretieren würde: Also keine ``for``-Schleifen wenn das nicht notwendig ist. Sonst kann man sich `pandas` auch Sparen und tatsächlich mit Listen operieren. `i` wäre in dem Fall auch jeweils eine Spaltenüberschrift und keine Zeile im `DataFrame`.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
itzhalpepe
User
Beiträge: 3
Registriert: Montag 4. Juni 2018, 11:35

Bild

Hier sieht man mal ein Bild von den Daten
Benutzeravatar
__blackjack__
User
Beiträge: 13146
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@itzhalpepe: Ändert grundsätzlich nichts an meiner Antwort. Wenn das ein `pandas.DataFrame` ist, dann die beiden Bedingungen über die Spalten auswerten, verknüpfen, und als Index in den `DataFrame` verwenden. Das sind Grundlagen.

Ein Bild von den Daten ist nicht ganz so hilfreich, weil man damit ausser anschauen ja nicht viel anfangen kann. Eine Form die man kopieren/einfügen kann, um selbst mal mit den Daten zu spielen, wäre hilfreicher.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten