__blackjack__ hat geschrieben: ↑Mittwoch 27. September 2023, 14:23
@ChrisLi: Noch eine Schleife weil Du mit der Liste eine weitere ”Dimension” hast. Du kannst ja nicht auf der Liste `iterrows()` aufrufen. Das ist eine Methode die kennt `list` nicht. Die kennen die einzelnen Objekte *in* der Liste. Und wenn Du für jedes Objekt *in* der Liste etwas machen willst, dann brauchst Du eine Schleife über die Elemente der Liste.
Wenn Du dann eine Schleife über alle Elemente von den drei Iteratoren haben möchtest, kannst Du die mit `itertools.chain.from_iterables()` verbinden. Das erspart Dir aber nicht in einer Schleife, beziehungsweise einem Generatorausdruck, durch die DataFrames zu iterieren, um `iterrows()` aufzurufen.
Man könnte diese Schleife noch mit `map()` und `operator.methodcaller()` ”verstecken”, aber dann liefe sie *in* der `map()`-Funktion.
Was immer noch bleibt ist die Frage warum überhaupt `iterrows()`. Das ist ein „code smell“.
@__blackjack__: iterrows() ist das erste, was mir begegnete und es funktioniert, also angenommen.
Ich habe es nun hinbekommen mit der weiteren Schleife, alles klar damit, vielen Dank.
Zum nächsten Problem habe ich gerade lange gesucht und werde nicht findig =( : "Pandas Use variable in df name to Write into multiple dfs in a for loop."
Ich habe nun diese das definiert:
Code: Alles auswählen
# create new dataframes for filtered data
df_M5_h2l = pd.DataFrame(columns=('time', 'high', 'low', 'high2low'))
df_M30_h2l = pd.DataFrame(columns=('time', 'high', 'low', 'high2low'))
df_H1_h2l = pd.DataFrame(columns=('time', 'high', 'low', 'high2low'))
Das kann ja nicht funktionieren, "tf" ist ja der gesamte df, jetzt brauche ich ja nur die Listenelemente..
und will im for loop alle drei füllen:
Code: Alles auswählen
tfList = [df_M5, df_M30, df_H1]
for tf in tfList:
for pos, d in tf.iterrows():
if ((d.time.hour >=0 ) and (d.time.hour <=8 )):
h2l = d.high - d.low
{tf + '_h2l'}.loc[pos] = [d.time,d.high,d.low,h2l]
Wie bekomme ich den Namen zusammengebastelt aus der Variablen "tf" und dem "_h2l", welches da noch dran kommt?
Code: Alles auswählen
f'{tf} + "_ht2l"'.loc[pos] = [d.time,d.high,d.low,h2l]
tut es auch nicht, dann wird er df zu einem string object and has no Attribute "loc"..
1000 Dank & Grüße