Python 熊猫数据框架和字典的深度复制

Python 熊猫数据框架和字典的深度复制,python,pandas,dictionary,copy,Python,Pandas,Dictionary,Copy,我正在创建一个小熊猫数据帧: df = pd.DataFrame(data={'colA': [["a", "b", "c"]]}) 我拿了一份df的复印件。我使用的不是Pandas方法,而是通用Python,对吗 import copy df_copy = copy.deepcopy(df) df_copy.head()提供以下内容: 然后我将这些值放入字典: mydict = df_copy.to_dict() 那本字典是这样的: 最后,我删除列表中的一项: mydict['col

我正在创建一个小熊猫数据帧:

df = pd.DataFrame(data={'colA': [["a", "b", "c"]]})
我拿了一份df的复印件。我使用的不是Pandas方法,而是通用Python,对吗

import copy
df_copy = copy.deepcopy(df)
df_copy.head()提供以下内容:

然后我将这些值放入字典:

mydict = df_copy.to_dict()
那本字典是这样的:

最后,我删除列表中的一项:

mydict['colA'][0].remove("b")
我很惊讶df_copy中的值被更新了。我非常困惑原始数据框中的值也被更新了!两个数据帧现在看起来都是这样的:

我知道熊猫并不真的做深度复制,但这不是熊猫的方法。我的问题是:

1) 如何从不更新数据帧的数据帧构建字典

2) 如何获取完全独立的数据帧副本

谢谢你的帮助

干杯, 尼古拉斯

免责声明
请注意,所以要确保你真的需要它,并且你明白你在做什么。

为什么你的副本不独立
当应用于对象时,copy.deepcopy为。添加它是为了避免为对象复制太多内容。对于DataFrame实例

类似地,如果要使用
DataFrame.copy(deep=True)


如何解决这个问题
要获取包含列表(或其他python对象)的数据帧的真正深度副本,使其独立,可以使用以下方法之一

df_copy = pd.DataFrame(columns = df.columns, data = copy.deepcopy(df.values))
对于字典,您可以使用相同的技巧:

mydict = pd.DataFrame(columns = df.columns, data = copy.deepcopy(df_copy.values)).to_dict()
mydict['colA'][0].remove("b")


如果需要,请随时询问任何澄清。

您是否尝试过使用字典而不是数据框进行深度复制?@Nicolas如果您对答案感到满意-如果您能将答案标记为正确,那就太好了。如果你仍然有一些问题-填写免费要求任何澄清。谢谢斯塔斯,完美,像我希望的那样工作!
import pickle
df_copy = pickle.loads(pickle.dumps(df))