Разница между мелкой копией и глубокой копией в фреймах данных Pandas

Опубликовано: 1 Декабря, 2021

Библиотека pandas имеет в основном две структуры данных: DataFrames и Series. Эти структуры данных внутренне представлены индексными массивами, которые маркируют данные, и массивами данных, которые содержат фактические данные. Теперь, когда мы пытаемся скопировать эти структуры данных (DataFrames и Series), мы по сути копируем индексы и данные объекта, и есть два способа сделать это, а именно Shallow Copy и Deep Copy.

Эти операции выполняются с помощью библиотечных функций pandas.DataFrame.copy (deep = False) для поверхностного копирования и pandas.DataFrame.copy (deep = True) для глубокого копирования в DataFrames и Series.

Теперь давайте разберемся, что такое поверхностное копирование.

Мелкая копия

Когда создается неглубокая копия объекта DataFrame или Series, она не копирует индексы и данные исходного объекта, а просто копирует ссылки на его индексы и данные. В результате изменения, внесенные в один, отражаются в другом.

Это относится к созданию нового объекта коллекции и последующему заполнению его ссылками на дочерние объекты, найденные в оригинале. Процесс копирования не повторяется и, следовательно, не создает копии самих дочерних объектов.
Пример:

Python3

# porgam 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 datframe
# and original dataframe
print ( ' Before Operation: ' , copydf = = df)
# assignmnet operation
copydf[ 'index' ] = [ 0 , 0 , 0 , 0 ]
# comparing shallow copied datframe
# and original dataframe
print ( ' After Operation: ' , copydf = = df)
print ( ' Original Dataframe after operation: ' , df)

Выход:

Как видно из выходных данных вышеуказанной программы, изменения, примененные к неглубоко скопированному фрейму данных, автоматически применяются к исходному фрейму данных.

Глубокая копия

Глубокая копия DataFrame или объекта Series имеет собственную копию индекса и данных. Это процесс, в котором процесс копирования происходит рекурсивно. Это означает сначала создание нового объекта коллекции, а затем рекурсивное заполнение его копиями дочерних объектов, найденных в оригинале. В случае глубокой копии копия объекта копируется в другой объект. Это означает, что любые изменения, внесенные в копию объекта, не отражаются в исходном объекте.

Пример:

Python3

# porgam 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 datframe
# and original dataframe
print(" Before Operation: ", copydf == df)
  
# assignmnet operation
copydf["index"] = [0, 0, 0, 0]
  
  
# comparing shallow copied datframe
# and original dataframe
print(" After Operation: ", copydf == df)
  
print(" Original Dataframe after operation: ", df)

Выход:

Здесь данные внутри исходных объектов не копируются рекурсивно. То есть данные внутри данных исходных объектов по-прежнему указывают на тот же блок памяти. Например, если данные в объекте Dataframe или Series содержат какие-либо изменяемые данные, тогда они будут совместно использоваться между ним и его глубокой копией, и любое изменение одного будет отражено в другом.

Таблица различий между Shallow Copy V / S Deep Copy

Sr нет. Мелкая копия Глубокая копия
1 Это копия структуры коллекции, а не элементы. Это копия коллекций, в которой дублируются все элементы исходной коллекции.
2 Влияет на исходный фрейм данных. Не влияет на исходный фрейм данных.
3 Неглубокая копия не реплицирует дочерние объекты. Глубокая копия рекурсивно реплицирует дочерние объекты.
4 Создание неглубокой копии происходит быстрее по сравнению с глубокой копией. Создание глубокой копии происходит медленно по сравнению с мелкой копией.
5 Копия зависит от оригинала Копия не полностью зависит от оригинала.

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.