复制方法在 pandas 数据框中如何工作?

Moh*_*ohi 3 python copy dataframe pandas

当我dg = df.copy()在 pandas 数据框中时,我知道我有两个数据框,其中 dg 是 df 的副本。但是对于df = df.copy(),新的 df 是否会覆盖旧的 df ?我的意思是在 RAM 中df = df.copy()我有多少个数据帧?

Kar*_*tel 5

但是对于 df = df.copy() ,新的 df 是否会覆盖旧的 df ?我的意思是在 df = df.copy() 的 RAM 中我有多少个数据帧?

这不是关于Pandas 或 DataFrame 类的问题。这是一个关于=Python中运算符的问题。

df.copy()创建一个新对象,它恰好是 DataFrame 类的新实例。这就是你所需要知道的。(你必须知道这一点,因为函数可以返回已经存在的对象。)无论你写还是,它都会以完全相同的方式执行此操作 - 这可能并不重要,因为该方法无法知道赋值甚至将会发生。dg = df.copy()df = df.copy()

赋值使名称引用某个特定对象。就是这样dg = df.copy()意思是“当你从 获取对象时df.copy(),让dg成为该对象的名称”。df = df.copy()意思是“当你从 获取对象时df.copy(),让df(不再是它之前命名的名称,并且)成为该对象的名称”。

只要对象有名称,它们就会一直存在。

当你写的时候dg = df.copy(),这个df名字仍然是原来的名字DataFrame,所以现在你的DataFrames记忆中必然有两个。

当您写入 时df = df.copy(),该df名称不再是原始名称的名称DataFrame,因为它已更改为新名称的名称。所以现在旧的可能还在记忆中,也可能不在记忆中。

如果它有任何其他名称(或其他引用 - 例如,作为某处列表的元素),它肯定仍然在内存中。

在参考实现中,如果这是对象的最后一个剩余名称,它将被释放。发生这种情况是因为引用实现使用基于引用计数的垃圾收集。其他实现(例如 Jython)可能不会这样做;他们可以使用任何类型的垃圾收集技术。