Я хочу объединить два панда DataFrames без копирования данных. То есть, я хочу, чтобы конкатенированный DataFrame представлял собой представление данных в двух исходных DataFrames. Я попытался использовать concat(), и это не сработало. Этот блок кода показывает, что изменение базовых данных влияет на два DataFrames, которые объединяются, но не сцепляются DataFrame:Как скомпилировать pandas DataFrames без копирования данных?
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)
Это выход из последних пяти строк. df изменилось после того, как новое значение было присвоено arr [0, 0]; df_concat не повлиял.
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
Я предполагаю, что это означает, что concat() создал копию данных. Есть ли способ избежать копирования? (Я хочу минимизировать использование памяти).
Кроме того, есть ли быстрый способ проверить, связаны ли два DataFrames с одними и теми же базовыми данными? (если не удастся изменить данные и проверить, изменился ли каждый DataFrame)
Спасибо за помощь.
FS
В настоящее время лучший способ проверить наличие двух массивов памяти numpy здесь: http://stackoverflow.com/questions/10747748/how-do-i-check-that-two-slices-of-numpy- array-are-the-same-or-overlapping –