Pandas数据框架中浅层复制与深层复制的区别

Pandas数据框架中浅层复制与深层复制的区别

pandas库中主要有两个数据结构DataFrames和Series。这些数据结构在内部是由索引数组和数据数组来表示的,前者标示数据,后者包含实际数据。现在,当我们试图复制这些数据结构(DataFrames和Series)时,我们基本上是复制对象的索引和数据,有两种方法可以做到这一点,即Shallow Copy和Deep Copy。

这些操作是在库函数pandas.DataFrame.copy(deep=False)pandas.DataFrame.copy(deep=True)的帮助下完成的,用于数据框架和系列的浅层复制。

现在,让我们了解一下什么是浅层复制。

浅层复制

当创建一个DataFrame或Series对象的浅层拷贝时,它并不复制原始对象的索引和数据,而只是复制对其索引和数据的引用。因此,一个对象的变化会反映在另一个对象上。

它指的是构造一个新的集合对象,然后用原始对象中的子对象的引用来填充它。复制的过程不进行递归,因此不会创建子对象本身的副本。

示例:

Pandas数据框架中浅层复制与深层复制的区别

# program to depict shallow copy
# in pandas dataframe
 
# import module
import pandas as pd
 
# assign dataframe
df = pd.DataFrame({'index': [1, 2, 3, 4],
                   'GFG': ['Mandy', 'Ron', 'Jacob', 'Bayek']})
 
 
# shallow copy
copydf = df.copy(deep=False)
 
# comparing shallow copied dataframe
# and original dataframe
print('\nBefore Operation:\n', copydf == df)
 
# assignment operation
copydf['index'] = [0, 0, 0, 0]
 
 
# comparing shallow copied dataframe
# and original dataframe
print('\nAfter Operation:\n', copydf == df)
 
print('\nOriginal Dataframe after operation:\n', df)

输出:

Pandas数据框架中浅层复制与深层复制的区别

我们可以从上述程序的输出中看到,应用于浅层复制的数据框架的变化会自动应用于原始数据框架。

深层复制

一个DataFrame或一个Series对象的深度拷贝有它自己的索引和数据的拷贝。这是一个递归地进行复制的过程。它意味着首先构造一个新的集合对象,然后用在原始对象中发现的子对象的副本递归地填充它。在深度复制的情况下,一个对象的副本被复制到另一个对象中。这意味着对对象的副本所做的任何改变都不会反映在原始对象中。

示例:

Pandas数据框架中浅层复制与深层复制的区别

# program to depict deep copy
# in pandas dataframe
 
# import module
import pandas as pd
 
# assign dataframe
df = pd.DataFrame({'index': [1, 2, 3, 4],
                   'GFG': ['Mandy', 'Ron', 'Jacob', 'Bayek']})
 
# deep copy
copydf = df.copy(deep=True)
 
# comparing shallow copied dataframe
# and original dataframe
print('\nBefore Operation:\n', copydf == df)
 
# assignment operation
copydf['index'] = [0, 0, 0, 0]
 
 
# comparing shallow copied dataframe
# and original dataframe
print('\nAfter Operation:\n', copydf == df)
 
print('\nOriginal Dataframe after operation:\n', df)

输出:

Pandas数据框架中浅层复制与深层复制的区别

在这里,原始对象里面的数据没有被递归复制。也就是说,原始对象的数据里面的数据仍然指向同一个内存单元。例如,如果Dataframe或Series对象中的数据包含任何可改变的数据,那么它将在它和它的深度拷贝之间共享,对一个对象的任何修改都会反映在另一个对象中。

浅层拷贝与深层拷贝的区别表

编号 浅层副本 深层副本
1 它是集合结构的副本,而不是元素的副本。 它是集合的副本,并复制了原始集合中的所有元素。
2 影响初始数据框。 不影响初始数据框架。
3 浅度复制不复制子对象。 深度复制会递归地复制子对象。
4 与深层拷贝相比,创建浅层拷贝的速度快。 创建深层拷贝比浅层拷贝慢。
5 副本依赖原件 副本不完全依赖原件。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程