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

  • Post category:Python

Pandas是基于NumPy的库,它为数据分析提供了很多实用的功能,其中最主要的数据结构就是Pandas数据框架DataFrame。在进行数据操作时,经常需要进行数据的复制操作,而复制操作分为浅层复制和深层复制。下面我们将详细解释这两种复制方式的区别并给出实例说明:

浅层复制

浅层复制是指创建一个新的对象,但该新对象仍然是原始对象的引用,也就是说,修改新对象会同时修改原始对象。通常使用的copy()方法就是浅层复制,例如:

import pandas as pd

data = {'name':['Tom', 'Lily', 'Lucy'], 'math':[90, 95, 80], 'english':[80, 85, 90]}
df1 = pd.DataFrame(data)

df2 = df1.copy()

df2['math'][0] = 100
print(df1)
print(df2)

运行结果为:

   name  math  english
0   Tom   100       80
1  Lily    95       85
2  Lucy    80       90

   name  math  english
0   Tom   100       80
1  Lily    95       85
2  Lucy    80       90

从运行结果可以看出,使用了copy()方法后,df2的math列第一行数据被修改为100,但同时df1的math列第一行也被修改了,这就是浅层复制的表现。

深层复制

深层复制是指创建一个新的对象,并将原始对象的数据复制到新对象中,但是新对象和原始对象是独立的,修改任何对象的数据都不会影响另一个对象。深层复制通常使用deepcopy()方法。例如:

import pandas as pd
import copy

data = {'name':['Tom', 'Lily', 'Lucy'], 'math':[90, 95, 80], 'english':[80, 85, 90]}
df1 = pd.DataFrame(data)

df2 = copy.deepcopy(df1)

df2['math'][0] = 100
print(df1)
print(df2)

运行结果为:

   name  math  english
0   Tom    90       80
1  Lily    95       85
2  Lucy    80       90

   name  math  english
0   Tom   100       80
1  Lily    95       85
2  Lucy    80       90

从运行结果可以看出,使用deepcopy()方法后,df2的math列第一行数据被修改为100,但df1的数据不发生变化,这就是深层复制的表现。

综上所述,Pandas数据框架中的复制操作分为浅层复制和深层复制,两者的主要区别在于浅层复制创建的是原始数据的引用,而深层复制创建的是原始数据的独立副本。为了避免数据操作时造成意想不到的bug,建议在复制操作时使用深层复制。