【问题标题】:Python/Pandas Novice: unwanted changes to dataframe are carrying through when reassigning to a new variablePython/Pandas 新手:重新分配给新变量时,对数据框进行了不必要的更改
【发布时间】: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 应该可以工作。
  • 哦,我明白了。今天又学到了一件事,谢谢!

标签: python pandas dataframe


【解决方案1】:

您应该尝试使用copy 函数。当您将df 分配给df2 时,如果不使用复制功能,dfdf2 将指向同一个对象。

import pandas as pd

df=pd.read_csv(x)
df2=df.copy()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多