【问题标题】:How to make a deepcopy of a dataframe with dataframes within it? (python)如何使用其中的数据框制作数据框的深度复制? (Python)
【发布时间】:2019-10-17 11:05:15
【问题描述】:

我想要一个包含数据框的数据框副本。当我在嵌套数据框中更改某些内容时,它不应该在原始数据框中更改。

我有一个这样的数据框:

   0  1                                                  2
0  1  2  <__main__.PossibleCombinations object at 0x000...
1  4  5                                                  6

使用下一个代码生成:

import copy
import numpy as np
import pandas as pd


df = pd.DataFrame(data= [[1,2,3],[4,5,6]])

class PossibleCombinations:
    def __init__(self, dfCombinations, numberCombinations):
        self.dfCombinations = dfCombinations
        self.numberCombinations = numberCombinations

df.iloc[0,2] = PossibleCombinations(pd.DataFrame(data= [[1,2,3],[4,5,6]]),6)
print(df)

当我对孔数据框和嵌套数据框进行深度复制并更改 副本中嵌套数据框,原始值也会发生变化。

deepCopy = copy.deepcopy(df)
deepCopy.iloc[0,2].dfCombinations = copy.deepcopy(df.iloc[0,2].dfCombinations)

deepCopy.iloc[0,2].dfCombinations.iloc[0,2] = "doei"

print(deepCopy.iloc[0,2].dfCombinations)
print(" ")
print(df.iloc[0,2].dfCombinations)

输出:

   0  1     2
0  1  2  doei
1  4  5     6

   0  1     2
0  1  2  doei
1  4  5     6

但我想要:

   0  1     2
0  1  2  doei
1  4  5     6

   0  1     2
0  1  2     3
1  4  5     6

有什么办法可以解决这个问题?

【问题讨论】:

    标签: python pandas dataframe deep-copy


    【解决方案1】:

    这是解决方法:

    import pickle
    deepCopy = pickle.loads(pickle.dumps(df))
    
    deepCopy.iloc[0,2].dfCombinations.iloc[0,2] = "doei"
    
    print(deepCopy.iloc[0,2].dfCombinations)
    print(" ")
    print(df.iloc[0,2].dfCombinations)
    

    输出:

    3
       0  1     2
    0  1  2  doei
    1  4  5     6
    
       0  1  2
    0  1  2  3
    1  4  5  6
    

    这样就解决了问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2020-08-31
      • 2016-06-09
      • 2021-02-28
      • 2020-04-17
      • 2013-07-18
      相关资源
      最近更新 更多