我正在创建一个小型 Pandas 数据框:
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 中的值已更新。我很困惑原始数据框中的值也被更新了!两个数据框现在看起来都是这样的:
我知道 Pandas 并不真正进行深度复制,但这不是 Pandas 方法。我的问题是:
1)如何从不更新数据帧的数据帧构建字典?
2)我如何获取完全独立的数据帧的副本?
感谢您的帮助!
干杯, 尼古拉斯
df_copy = pd.DataFrame(columns = df.columns, data = copy.deepcopy(df.values))
,因此请确保您确实需要它并且了解您在做什么。
为什么你的文案不独立
deepcopy_ 方法,依次调用该方法。添加它是为了避免复制太多对象。对于 DataFrame 实例版本 0.20.0 及更高版本 - _deepcopy_ 无法递归工作。 类似地,如果您将使用
DataFrame.copy(deep=True)
深复制将复制数据,但不会递归地这样做。。
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")
import pickle
df_copy = pickle.loads(pickle.dumps(df))
如有需要,请随时要求任何澄清。