当前位置: 首页 > 面试题库 >

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

孟增
2023-03-14
问题内容

有人可以向我解释一下

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]

我想念什么?


问题答案:

如果看到创建的各种数据框的对象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 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.

编辑:在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]: 
            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中的列表,因为它们是相同的对象。



 类似资料:
  • DEEP(Digital Enterprise End-to-end Platform)是由 AWS 支持的成本低,维护成本低的数字化平台。帮助企业开发人员提高工作效率。 使用DEEP Framework,开发人员可以立即使用: 简化的“类似于生产”的开发环境 使用微服务架构的企业级平台 零发展几乎无限的可扩展性(又名无服务器计算) 来自云提供商(例如AWS,GCP等)的Web服务的抽象使用

  • 人工神经网络(ANN)是一种高效的计算系统,其中心主题借鉴了生物神经网络的类比。 神经网络是机器学习的一种模型。 在20世纪80年代中期和90年代初期,在神经网络中进行了许多重要的建筑改进。 在本章中,您将了解有关深度学习的更多信息,这是一种人工智能的方法。 深度学习源自十年来爆炸性的计算增长,成为该领域的一个重要竞争者。 因此,深度学习是一种特殊的机器学习,其算法受到人脑结构和功能的启发。 机器

  • 本教程的前四章旨在为初学者提供IntelliJ的基本概述。 本节深入探讨了IntelliJ,并讨论了有关项目,其格式以及其他内容的更多信息。 了解项目 项目是您正在使用的应用程序或软件。 它可以包含多个模块,类,库,配置等。 它是层次结构中最顶层的元素。 了解模块 模块在“项目”下面有一个梯级。 模块是一个独立的实体,可以独立于其他模块进行编译,调试和运行。 单个项目可以包含多个模块。 您可以随时

  • deep-listening Deep learning experiments for audio classification A full write-up, including technical explanations and design decisions, as well as a summary of results achieved can be found within t

  • New books available for subscription Deep Diamond Adopt your pet function and become a patron. Deep Diamond is a Clojure library for fast tensors and neural network related computations based on the h

  • deep-clean A Kotlin script that nukes all build caches from Gradle/Android projects.Useful when Gradle or the IDE let you down �� �� h/t to @Takhion for the original idea, and to@holgerbrandl for KScr