首页 > 解决方案 > 如何使用其中的数据框制作数据框的深度复制?(Python)

问题描述

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

我有一个这样的数据框:

   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

这个问题的解决方法是什么?

标签: pythonpandasdataframedeep-copy

解决方案


这是修复:

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

这解决了问题!


推荐阅读