In pandas, can I deeply copy a DataFrame including its index and column?

前端 未结 2 1090
孤街浪徒
孤街浪徒 2020-12-03 04:59

First, I create a DataFrame

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

Then, I deeply copy it by copy

相关标签:
2条回答
  • 2020-12-03 05:14

    Latest version of Pandas does not have this issue anymore

      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)
    
    0 讨论(0)
  • 2020-12-03 05:17

    I wonder whether this is a bug in pandas... it's interesting because Index/MultiIndex (index and columns) are in some sense supposed to be immutable (however I think these should be copies).

    For now, it's easy to create your own method, and add it to 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()
    

    As you can see this will create new objects (and preserve names):

    In [14]: id(df.columns)
    Out[14]: 4370636624
    
    In [15]: id(df2.columns)
    Out[15]: 4372118776
    
    0 讨论(0)
提交回复
热议问题