Wie füge ich pandas DataFrames ohne das kopieren der Daten?

Möchte ich zum verketten von zwei pandas DataFrames ohne kopieren der Daten. Das ist, möchte ich die verkettete DataFrame um eine Sicht auf die Daten in den beiden original-DataFrames. Ich habe versucht, mit concat() und das hat nicht funktioniert. Dieser code-block zeigt, dass eine änderung der zugrunde liegenden Daten beeinflusst die beiden DataFrames, die verkettet sind, aber nicht die verkettete DataFrame:

arr = np.random.randn(12).reshape(6, 2)
df = pd.DataFrame(arr, columns = ('VALE5', 'PETR4'), index = dates)
arr2 = np.random.randn(12).reshape(6, 2)
df2 = pd.DataFrame(arr, columns = ('AMBV3', 'BBDC4'), index = dates)
df_concat = pd.concat(dict(A = df, B = df2),axis=1)
pp(df)
pp(df_concat)
arr[0, 0] = 9999999.99
pp(df)
pp(df_concat)

Dies ist die Ausgabe der letzten fünf Zeilen. df geändert, nachdem ein neuer Wert zugewiesen wurde, arr[0, 0]; df_concat war nicht betroffen.

In [56]: pp(df)
           VALE5     PETR4
2013-01-01 -0.557180  0.170073
2013-01-02 -0.975797  0.763136
2013-01-03 -0.913254  1.042521
2013-01-04 -1.973013 -2.069460
2013-01-05 -1.259005  1.448442
2013-01-06 -0.323640  0.024857

In [57]: pp(df_concat)
               A                   B          
           VALE5     PETR4     AMBV3     BBDC4
2013-01-01 -0.557180  0.170073 -0.557180  0.170073
2013-01-02 -0.975797  0.763136 -0.975797  0.763136
2013-01-03 -0.913254  1.042521 -0.913254  1.042521
2013-01-04 -1.973013 -2.069460 -1.973013 -2.069460
2013-01-05 -1.259005  1.448442 -1.259005  1.448442
2013-01-06 -0.323640  0.024857 -0.323640  0.024857

In [58]: arr[0, 0] = 9999999.99

In [59]: pp(df)
                 VALE5     PETR4
2013-01-01  9999999.990000  0.170073
2013-01-02       -0.975797  0.763136
2013-01-03       -0.913254  1.042521
2013-01-04       -1.973013 -2.069460
2013-01-05       -1.259005  1.448442
2013-01-06       -0.323640  0.024857

In [60]: pp(df_concat)
               A                   B          
           VALE5     PETR4     AMBV3     BBDC4
2013-01-01 -0.557180  0.170073 -0.557180  0.170073
2013-01-02 -0.975797  0.763136 -0.975797  0.763136
2013-01-03 -0.913254  1.042521 -0.913254  1.042521
2013-01-04 -1.973013 -2.069460 -1.973013 -2.069460
2013-01-05 -1.259005  1.448442 -1.259005  1.448442
2013-01-06 -0.323640  0.024857 -0.323640  0.024857

Ich denke, das bedeutet concat () - erstellt eine Kopie der Daten. Gibt es eine Möglichkeit zu vermeiden, eine Kopie gemacht werden? (Ich will Speichernutzung zu minimieren).

Außerdem gibt es eine schnelle Möglichkeit, zu überprüfen, ob zwei DataFrames sind im Zusammenhang mit der gleichen zugrunde liegenden Daten? (kurze gehen durch die Mühe, die Daten zu verändern und die Kontrolle, wenn jeder DataFrame geändert hat)

Danke für die Hilfe.

FS

InformationsquelleAutor Soldalma | 2013-08-18
Schreibe einen Kommentar