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

How copy method works in pandas dataframe?

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

来自官方Pandasdocumentation

DataFrame.copy(deep=True)

Make a copy of this object’s indices and data.

When deep=True (default), a new object will be created with a copy of the calling object’s data and indices. Modifications to the data or indices of the copy will not be reflected in the original object (see notes below).

When deep=False, a new object will be created without copying the calling object’s data or index (only references to the data and index are copied). Any changes to the data of the original will be reflected in the shallow copy (and vice versa).

所以当你有 df = df.copy() 时,你只是将 df 对象分配给 df 变量名,所以在功能上没有任何变化。它被覆盖,但保持不变。所以你仍然只有一个 df 对象存储在内存中。

But for df = df.copy(), does the new df overrides the old df? I mean in the RAM for df = df.copy() how many dataframes I have?

不是关于Pandas或DataFrame class的问题。这是关于 Python.

中的 = 运算符的问题

df.copy() 创建一个新对象,它恰好是 DataFrame class 的一个新实例。这就是你所需要知道的。 (你必须知道这一点,因为函数可以 return 已经存在的对象。)无论你写 dg = df.copy() 还是 完全相同的方式 =13=] - 这可能无关紧要,因为该方法甚至无法知道分配是否会发生。

作业causes a name to refer to some particular object。那是dg = df.copy() 表示“当您从 df.copy() 取回对象时,让 dg 成为该对象的名称”。 df = df.copy() 的意思是“当你从 df.copy() 取回对象时,让 df(不再是它之前命名的名称,而是)成为该对象的名称”。

只要有名字,对象就会一直存在。

当你写dg = df.copy()时,df的名字还是原来的DataFrame的名字,所以现在你的内存中必然有两个DataFrames

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

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

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