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

python Pandas DataFrame copy(deep = False)vs复制(deep = True)vs'=',第1张

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

如果看到创建的各种数据框的对象ID,则可以清楚地看到正在发生的事情。

在编写时

df2 = df1
,您正在创建一个名为的变量
df2
,并将其与一个ID为ID的对象绑定
4541269200
。在编写时
df1 =pd.Dataframe([9,9,9])
,您将创建一个具有id的 对象
4541271120
并将其绑定到variable
df1
,但是
4541269200
先前绑定到id的对象将
df1
继续存在。如果没有绑定到该对象的变量,它将被Python收集到垃圾。

In[33]: import pandas as pdIn[34]: df1 = pd.Dataframe([1,2,3,4,5])In[35]: id(df1)Out[35]: 4541269200In[36]: df2 = df1In[37]: id(df2)Out[37]: 4541269200  # Same id as df1In[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.

编辑:在7/30/2018添加

深度复制在熊猫中不起作用,开发人员考虑将可变对象作为反模式放置在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]:  A0  45157148321  4515734952In[14]: df2 = df1.copy(deep=True)In[15]: df2.applymap(id)Out[15]:  A0  45157148321  4515734952In[16]: df2.loc[0, 'A'].append(55)In[17]: df2Out[17]:     A0  [1, 2, 3, 55]1   [1, 2, 3, 4]In[18]: df1Out[18]:     A0  [1, 2, 3, 55]1   [1, 2, 3, 4]

df2
,如果它是真正的深层副本,则其中应包含列表的新ID。结果,当您修改df2中的列表时,它也会影响df1中的列表,因为它们是相同的对象。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5644158.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存