Hey,
ich bin auf etwas gestoßen, das ich beim besten Willen nicht verstehe.
Ich überführe einer Funktion die Variable 'Close'. Diese soll in einem DataFrame namens 'RSI_DATA_Append' an der Stelle 'Close' gespeichert werden. Code sieht wie folgt aus:
def Func(Close):
RSI_DATA_Append=[ ]
RSI_DATA_Append=pd.DataFrame(RSI_DATA_Append)
RSI_DATA_Append['Close']=Close
print(RSI_DATA_Append)
---> Empty DataFrame
Columns: [Close]
Index: []
Es sollen im späteren Funktionsverlauf noch sehr viele weitere Variablen eingespeichert werden (daher die DF Erstellung)
Wenn ich in der ersten Zeile print(Close) einfüge kann ich feststellen, dass der Wert richtig übergeben wurde. WARUM zur Hölle bleibt das DF dann leer?
DANKE IM VORAUS!
Grüße
Leeres DataFrame trotz Zuweisung
Zur richtigen Formatierung gibt es die code-tags - das ist der </>-Button im vollstaendigen Editor.
Und zu deiner Frage: ich sehe nur, dass du einen DataFrame anlegst. Ich sehe nicht, das du ihn auch zurueck gibst. Daten kommen in eine Funktion als Parameter, und verlassen sie per return. Globale Variablen gibt es zwar, die sollte man allerdings tunlichst vermeiden.
Die Zuweisung RSI_DATA_Append=[] ist im uebrigen Unfug, wenn direkt in der Zeile danach ein DataFrame erzeugt wird. So wuerde ich das ganze machen (unter Nutzung der in Python ueblichen Namenskonvenitionen):
Und zu deiner Frage: ich sehe nur, dass du einen DataFrame anlegst. Ich sehe nicht, das du ihn auch zurueck gibst. Daten kommen in eine Funktion als Parameter, und verlassen sie per return. Globale Variablen gibt es zwar, die sollte man allerdings tunlichst vermeiden.
Die Zuweisung RSI_DATA_Append=[] ist im uebrigen Unfug, wenn direkt in der Zeile danach ein DataFrame erzeugt wird. So wuerde ich das ganze machen (unter Nutzung der in Python ueblichen Namenskonvenitionen):
Code: Alles auswählen
def func(df, close):
df['Cloes'] = close
def main():
df = pd.DataFrame(RSI_DATA_Append) # wo auch immer RSI_DATA_Append herkommt...
func(df, close) # wo auch immer close herkommt.
if __name__ == "__main__":
main()
Danke schonmal.
RSI_DATA_Append soll nicht überführt werden, sondern zu jedem Aufruf der Funktion leer sein. Der volle DF wird dann am Ende zurückgegeben. Ich habe es jetzt leicht umgewandelt und stoße auf noch größere Verwirrung
ausgegeben wird:
5
Empty DataFrame
Columns: [Close]
Index: []
5
------> ?!?!?!?
RSI_DATA_Append soll nicht überführt werden, sondern zu jedem Aufruf der Funktion leer sein. Der volle DF wird dann am Ende zurückgegeben. Ich habe es jetzt leicht umgewandelt und stoße auf noch größere Verwirrung
Code: Alles auswählen
# angenommen Close sei 5
def Func(Close):
print(Close)
RSI_DATA_Append=pd.DataFrame( [ ] )
RSI_DATA_Append['Close']=Close
print(RSI_DATA_Append)
print(Close)
return RSI_DATA_Append
5
Empty DataFrame
Columns: [Close]
Index: []
5
------> ?!?!?!?
- __blackjack__
- User
- Beiträge: 13109
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Mal so nebenbei: Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
Und man kann sich den Zwischenschritt „leerer DataFrame“ → „hinzufügen von "Close"-Spalte“ sparen und gleich den `DataFrame` mit der Spalte erstellen. Dann stellt sich aber auch langsam die Frage wozu es da eine eigene Funktion für braucht.
Edit: Nochmal zur Erklärung des Phänomens: Du hast einen leeren DataFrame, also 0 Zeilen, und fügst da eine Spalte hinzu die dann natürlich auch 0 Zeilen hat, und jeder dieser 0 Zeilen wird in dieser Spalte der Wert 5 zugewiesen.
Was soll das denn überhaupt werden? Du hast hoffentlich nicht vor einen `DataFrame` Zeile um Zeile um Werte zu erweitern? Das macht man nicht, das ist auch gnadenlos ineffizient.
Und man kann sich den Zwischenschritt „leerer DataFrame“ → „hinzufügen von "Close"-Spalte“ sparen und gleich den `DataFrame` mit der Spalte erstellen. Dann stellt sich aber auch langsam die Frage wozu es da eine eigene Funktion für braucht.
Edit: Nochmal zur Erklärung des Phänomens: Du hast einen leeren DataFrame, also 0 Zeilen, und fügst da eine Spalte hinzu die dann natürlich auch 0 Zeilen hat, und jeder dieser 0 Zeilen wird in dieser Spalte der Wert 5 zugewiesen.
Was soll das denn überhaupt werden? Du hast hoffentlich nicht vor einen `DataFrame` Zeile um Zeile um Werte zu erweitern? Das macht man nicht, das ist auch gnadenlos ineffizient.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
haha gut erkannt!
im groben das projekt: ich hole über eine API die letzten 60 preise (im 1 Min Abstand) eines Produkts. Zu jedem Berechne ich einen iterativen Index (RSI= Relative Strength Index).
Das stellt die Basis dar. Darauf frage ich im 1 Min Takt weiter den Momentanpreis ab, berechne den RSI für diesen neuen Wert, press das in einen DF und hänge ihn an den Basis DF an und speichere ihn in einer Excel. Das ganze läuft endlos.
--> Ich habe Maschinenbau studiert, mit Programmieren wenig Kontakt gehabt. Wie ist die Profi-Variante? (:
im groben das projekt: ich hole über eine API die letzten 60 preise (im 1 Min Abstand) eines Produkts. Zu jedem Berechne ich einen iterativen Index (RSI= Relative Strength Index).
Das stellt die Basis dar. Darauf frage ich im 1 Min Takt weiter den Momentanpreis ab, berechne den RSI für diesen neuen Wert, press das in einen DF und hänge ihn an den Basis DF an und speichere ihn in einer Excel. Das ganze läuft endlos.
--> Ich habe Maschinenbau studiert, mit Programmieren wenig Kontakt gehabt. Wie ist die Profi-Variante? (: