gpt4 book ai didi

python Pandas DataFrame 复制(deep=False)vs 复制(deep=True)vs '='

转载 作者:IT老高 更新时间:2023-10-28 20:41:30 29 4
gpt4 key购买 nike

谁能给我解释一下

df2 = df1

df2 = df1.copy()

df3 = df1.copy(deep=False)

我已经尝试了所有选项并执行了以下操作:

df1 = pd.DataFrame([1,2,3,4,5])
df2 = df1
df3 = df1.copy()
df4 = df1.copy(deep=False)
df1 = pd.DataFrame([9,9,9])

并返回如下:

df1: [9,9,9]
df2: [1,2,3,4,5]
df3: [1,2,3,4,5]
df4: [1,2,3,4,5]

所以,我观察到 .copy().copy(deep=False) 之间的输出没有区别。为什么?

我希望选项 '='、copy()、copy(deep=False) 之一返回 [9,9,9]

请问我错过了什么?

最佳答案

如果您看到您创建的各种 DataFrame 的对象 ID,您可以清楚地看到发生了什么。

当您编写 df2 = df1 时,您正在创建一个名为 df2 的变量,并将它与一个 ID 为 4541269200 的对象绑定(bind)。当您编写 df1 = pd.DataFrame([9,9,9]) 时,您正在创建一个 ID 为 4541271120new 对象并进行绑定(bind)它到变量 df1,但之前绑定(bind)到 df1 的 id 为 4541269200 的对象继续存在。如果没有绑定(bind)到该对象的变量,它将由 Python 收集垃圾。

In[33]: import pandas as pd
In[34]: df1 = pd.DataFrame([1,2,3,4,5])
In[35]: id(df1)
Out[35]: 4541269200

In[36]: df2 = df1
In[37]: id(df2)
Out[37]: 4541269200 # Same id as df1

In[38]: df3 = df1.copy()
In[39]: id(df3)
Out[39]: 4541269584 # New object, new id.

In[40]: df4 = df1.copy(deep=False)
In[41]: id(df4)
Out[41]: 4541269072 # New object, new id.

In[42]: df1 = pd.DataFrame([9, 9, 9])
In[43]: id(df1)
Out[43]: 4541271120 # New object created and bound to name 'df1'.

In[44]: id(df2)
Out[44]: 4541269200 # Old object's id not impacted.

编辑:于 2018 年 7 月 30 日添加

深拷贝doesn't work in pandas并且开发人员考虑将可变对象放在 DataFrame 中作为反模式。考虑以下几点:

In[10]: arr1 = [1, 2, 3]
In[11]: arr2 = [1, 2, 3, 4]
In[12]: df1 = pd.DataFrame([[arr1], [arr2]], columns=['A'])
In[13]: df1.applymap(id)
Out[13]:
A
0 4515714832
1 4515734952

In[14]: df2 = df1.copy(deep=True)
In[15]: df2.applymap(id)
Out[15]:
A
0 4515714832
1 4515734952

In[16]: df2.loc[0, 'A'].append(55)
In[17]: df2
Out[17]:
A
0 [1, 2, 3, 55]
1 [1, 2, 3, 4]
In[18]: df1
Out[18]:
A
0 [1, 2, 3, 55]
1 [1, 2, 3, 4]

df2,如果它是一个真正的深拷贝,它应该为其中包含的列表具有新的 id。因此,当您修改 df2 中的列表时,它也会影响 df1 中的列表,因为它们是相同的对象。

关于python Pandas DataFrame 复制(deep=False)vs 复制(deep=True)vs '=',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46327494/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com