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: 13004
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.
“Most people find the concept of programming obvious, but the doing impossible.” — 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: 13004
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`.
“Most people find the concept of programming obvious, but the doing impossible.” — 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: 13004
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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten