python - 如何使用其中的数据框制作数据框的深度复制?(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
这个问题的解决方法是什么?
解决方案
这是修复:
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
这解决了问题!
推荐阅读
- android - 如何知道 Google Play 帐户
- php - 如何在 Mobile-Detect 中仅获取手机名称?
- c - 将句子中的单词替换为另一个单词的C程序
- ruby-on-rails - has_secure_password 不能使用 key_digest 而不是 password_digest?
- ffmpeg - 如何将碎片化的 mp4 作为 ffmpeg 的输入?
- javascript - Web Audio API - 连接到当前歌曲并获取波形
- javascript - 你好,我希望当我点击它时页面上的图标会发生变化(使用 JS),但它不起作用
- javascript - 代码大战上的执行超时问题。如何优化代码
- html - 复杂流程卡的移动响应式设计
- graalvm - 第一次使用SpringNative后,SpringBoot的集成失败了。请支持我