2017-06-01 7 views
0

Ich habe ziemlich viele Datenrahmen, die ich früh in meinem Skript definiert, und ich möchte über ihnen zu wechseln und ändern sie wie so:Looping durch und Modifizieren Liste von Variablen

for df in [df_fap, df_spf, df_skin, ...]: 
    df = df.filter(regex=(assay + r"[0-9]+")) 

aber das funktioniert nicht. Die Werte der Datenframes werden nicht geändert, wenn die Schleife beendet ist. Ich stolperte über diese post, die etwas ähnlich ist (außer ich definiere meine Variablen im Voraus), aber es bietet nicht wirklich eine Lösung für mein genaues Problem. Vielen Dank!

+0

Nein, ich bekomme keinen Fehler. Die Datenframes werden erst nach Beendigung der Schleifen überhaupt nicht verändert. Zum Beispiel hat 'df_fap' eine Spalte' NC-1', die entfernt werden sollte (und zwar wenn 'df_fap = df_fap.filter (regex = (assay + r "[0-9] +")) ') aber wird im obigen Skript nicht entfernt. – quantik

+0

@Remolten Nein sollte es nicht. – khelwood

+0

Ja, weil die Zuweisung nichts ändert. –

Antwort

1

Die Schleifenvariable df wiederum jedes Element der Liste zugeordnet ist. Wenn Sie df neu zuweisen, haben Sie df auf etwas anderes bezogen. Es hat keinen Einfluss auf die Liste.

Die erneute Zuweisung der Schleifenvariablen beim Durchlaufen einer Liste ändert die Liste nicht, ganz zu schweigen von der Änderung der Variablen, die zum Auffüllen der Liste verwendet wurden.

Versuchen Sie eine list comprehension.

new_list = [df.filter(whatever) for df in (df_fap, df_spf, df_skin, ...)] 

Wenn Sie dann möchten Sie auch Ihr Ausgangsvariablen zuweisen, könnten Sie verwenden:

df_fap, df_spf, df_skin, ... = new_list 

Sie sogar in einem Schuss beide diese Operationen tun könnte:

df_fap, df_spf, df_skin, ... = [df.filter(whatever) for df in (df_fap, df_spf, df_skin, ...)] 
+0

Ich bin verwirrt, was genau passiert in der Art, wie ich es mache. Die Elemente in der Liste werden vorübergehend geändert? Sie sind nur Platzhalter? Wenn dann das nächste Element aufgerufen wird, was passiert mit der Änderung, die gemacht wird? – quantik

+1

Wie Sie es tun, wird die Liste nicht geändert.Nur die 'df'-Variable wird geändert, um auf etwas anderes zu verweisen. – khelwood

0

Versuchen

for i in range(len(df_list)): 
    df_list[i] = df_list[i].filter(...) 
+0

Ah Ich wollte dies tun, ohne vorher die Liste zu definieren. Nicht sicher, ob es möglich ist. EDIT: Versucht. Dies funktioniert leider nicht – quantik

1

so haben Sie Ihre Liste der Variablen

[df_fap, df_spf, df_skin, ...] 

wenn Sie Schleife Sie eine neue Variable

for df in [df_fap, df_spf, df_skin, ...]: 
    df = value 

jeder Iteration (Loop) Ihrer für die Erstellung sind, um den Wert von df Reseting, keine Ihrer Variablen Bedeutung wird

die Antwort khelwood gab bedeutet, dass Sie ändern ‚ll alle Ihre Variablen deklarieren und den Filter in einer

df_fap, df_spf, df_skin, ... = [df_fap, df_spf, df_skin, ...] 

anwenden versuchen, etwas zu tun wie

a,b = ["apple","banana"] 

in Ihrer Konsole und Khelwoods Erklärung wird Sinn machen