【发布时间】:2019-11-23 01:41:29
【问题描述】:
我有一个名为 df 的数据框,我在其中应用了一些简单的转换(删除列、替换值等)。我正在执行的工作需要我拥有 2 个数据框副本;一个有变化,一个处于原始状态。这是我正在经历的一个例子:
import pandas as pd
df=pd.read_csv(x)
df=df2
#created a data frame called df2 that should reflect all changes in df at this point (i.e. I want the file to remain in its original state)
#changes are then made to df
print(df)
#some output
print(df2)
#all changes made to df are now showing in df2, which is what I don't want
很明显,我不完全了解 Python 中数据帧的操作方式,我来自 R 背景。 这是正常的行为,还是不应该发生的事情?如何在转换的早期阶段制作数据帧的副本,而不会将这些更改传递到包含 df 内容的另一个变量?当我键入此内容时,我意识到我可能只需要使用不同的名称再次导入文件。我希望这很清楚,希望了解这里发生的事情。感谢大家的帮助。
【问题讨论】:
-
标准的“分配给新变量”方法将返回数据帧的浅表副本。要获取深层副本,请使用
df2 = df.copy() -
试试
df2 = df.copy() -
然后尝试
df2 = df.copy(deep=True)。True是默认值,但谁知道那里发生了什么。显式设置它必须给你一个深拷贝 -
我说的是任务。您说分配给一个新变量会创建一个浅拷贝。这是不正确的。赋值从不复制,它只是创建一个对对象的新引用。
.copy应该可以工作。 -
哦,我明白了。今天又学到了一件事,谢谢!