Подтвердить что ты не робот

В pandas могу ли я глубоко скопировать DataFrame, включая его индекс и столбец?

Сначала я создаю DataFrame

In [61]: import pandas as pd
In [62]: df = pd.DataFrame([[1], [2], [3]])

Затем я глубоко копирую его copy

In [63]: df2 = df.copy(deep=True)

Теперь DataFrame отличаются.

In [64]: id(df), id(df2)
Out[64]: (4385185040, 4385183312)

Однако index все те же.

In [65]: id(df.index), id(df2.index)
Out[65]: (4385175264, 4385175264)

То же самое происходит в столбцах, есть ли способ, которым я могу легко скопировать его не только значения, но также индекс и столбцы?

4b9b3361

Ответ 1

У последней версии Pandas больше нет этой проблемы

  import pandas as pd
  df = pd.DataFrame([[1], [2], [3]])

  df2 = df.copy(deep=True)

  id(df), id(df2)
  Out[3]: (136575472, 127792400)

  id(df.index), id(df2.index)
  Out[4]: (145820144, 127657008)

Ответ 2

Интересно, является ли это ошибкой в ​​ pandas... это интересно, потому что Index/MultiIndex (индекс и столбцы) в некотором смысле должны быть неизменными (однако я думаю, что это должны быть копии).

На данный момент легко создать свой собственный метод и добавить его в DataFrame:

In [11]: def very_deep_copy(self):
    return pd.DataFrame(self.values.copy(), self.index.copy(), self.columns.copy())

In [12]: pd.DataFrame.very_deep_copy = very_deep_copy

In [13]: df2 = df.very_deep_copy()

Как вы можете видеть, это создаст новые объекты (и сохранит имена):

In [14]: id(df.columns)
Out[14]: 4370636624

In [15]: id(df2.columns)
Out[15]: 4372118776