Pandas数据中的浅拷贝与深拷贝

news2024/10/10 12:17:08

pandas库主要有两种数据结构DataFrames和Series。这些数据结构在内部用索引数组和数据数组表示,索引数组标记数据,数据数组包含实际数据。现在,当我们试图复制这些数据结构(DataFrames和Series)时,我们实际上是复制对象的索引和数据,有两种方法可以做到这一点,即浅复制和深复制。
这些操作是在库函数pandas.DataFrame.copy(deep=False)(用于浅拷贝)和pandas.DataFrame.copy(deep=True)(用于DataFrames和Series中的深拷贝)的帮助下完成的。

现在,让我们了解一下什么是浅拷贝。

浅拷贝

当创建DataFrame或Series对象的浅层副本时,它不会复制原始对象的索引和数据,而只是复制对其索引和数据的引用。因此,对一个对象所做的更改将反映在另一个对象中。

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

比如:
在这里插入图片描述

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)

输出

在这里插入图片描述

从上面程序的输出可以看出,应用于浅层复制数据帧的更改会自动应用于原始数据帧。

深拷贝

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

例如
在这里插入图片描述

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)

输出
在这里插入图片描述
在这里,原始对象中的数据不会被递归复制。也就是说,原始对象的数据中的数据仍然指向相同的存储单元。例如,如果Dataframe或Series对象中的数据包含任何可变数据,那么它将在它和它的深层副本之间共享,并且对其中一个的任何修改都将反映在另一个中。

浅拷贝与深拷贝的区别

浅拷贝深拷贝
它是集合结构的副本,而不是元素的副本。它是集合的副本,其中复制了原始集合中的所有元素。
影响初始数据帧。不影响初始数据帧。
浅拷贝不会复制子对象。深拷贝递归地复制子对象。
创建浅拷贝比创建深拷贝快。与浅拷贝相比,创建深拷贝速度较慢。
副本依赖于原件。副本并不完全依赖于原件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/993731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用PySide2将designer设计的ui文件加载到Python类上鼠标拖拽显示路径

应用场景: designer快速设计好UI文件后,需要增加一些特别的界面功能,如文件拖拽显示文件路径功能。 方法如下: from PySide2.QtWidgets import QApplication, QMainWindow from PySide2.QtUiTools import loadUiTypeUi_MainWindo…

Linux:LVS (DR群集搭建)

环境 dr服务器: ens33网络接口ip:192.168.254.4 ens33:0接口:192.168.254.66 web1服务器:ens33ip:192.168.254.1 lo:0接口ip:192.168.254.66 web2服务器:ens33ip:192.168.254.2 lo:0接口ip:192.168.254.66 nfs数据…

web 学习之 超链接文本

前言 HTML中的超链接文本用于创建可点击的链接,允许用户跳转到其他网页、文件或资源。超链接文本通常是可识别的文本或图像,当用户点击它时,浏览器会加载链接指定的目标。在HTML中,超链接文本使用标签(anchor标签&…

OPC UA协议基础

C#开发使用参考github地址:GitHub - OPCFoundation/UA-.NETStandard: OPC Unified Architecture .NET Standard 同步到gitee的地址:UA-.NETStandard: github导入:https://github.com/OPCFoundation/UA-.NETStandard 协议参考网站&#xff1…

【23种设计模式】组合模式【⭐】

个人主页:金鳞踏雨 个人简介:大家好,我是金鳞,一个初出茅庐的Java小白 目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客&am…

多态语法,析构多态

目录 多态的构成条件 虚函数重写: 多态的构成条件 多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如 Student 继承了 Person 。 Person 对象买票全价, Student 对象买票半价。 继承中要 构成多态两个条件 …

【PowerQuery】Excel的PowerQuery按需刷新

将数据通过PowerQuery 导入进来后,这里将进行数据分组运算,最终的数据计算结果将保存在Excel 表格中,图为销售统计结果。 在Excel中,如果我们希望进行销售统计的手动更新可以使用几种不同的方法来进行刷新: 刷新单一数据连接如果仅仅需要刷新单一数据连接的话我们可以通过…

RocketMQ_高级特性_事务消息

Apache RocketMQ在4.3.0版中已经支持分布式事务消息,这里RocketMQ采用了2PC的思想来实现了提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息,如下图所示。 事务消息发送步骤如下: 生产者将半事务消息发送至消息队…

Bmfont 软件生成fnt 字体步骤

Bmfont 软件 用来生成 fnt 格式的字体文件和 png 图片,常用于cocos 游戏开发中制作动态字体。 下面手把手介绍 Bmfont 软件生成fnt 字体的详细步骤: 1、下载安装Bmfont 软件 2、新建文本字库 新建一个txt文本文档。 注意:保存为UTF-8-BOM 编…

Nuxt讲解

代码仓库 nuxt基础 内置组件 nuxt为我们提供了一些内置组件,可以直接使用不用导入,其中常用的如下 SEO组件 HtmlBodyHeadTitleMetaStyleLinkNoScriptBase SEO组件可以更加方便的让我们再页面中添加利于seo的元素 NuxtWelcome 欢迎页面组件&#…

打开深度学习的锁

打开深度学习的锁 导言一、导入的包和说明二、数据的预处理2.1 数据集说明2.2 数据集降维度并且转置2.3 数据预处理完整代码 三、逻辑回归3.1 线性回归函数公式3.2 sigmoid函数公式 四、初始化函数五、构建逻辑回归的前向传播和后向传播5.1 损失函数5.2 前向传播5.3 后向传播5.…

Excel学习 WPS版

Excel学习 1.界面基础1.1 方格移动快捷键1.2 自动适配文字长度1.3 跨栏置中1.4 多个单元格同宽度:1.5 下拉框选择1.6 打印预览1.7 绘制边框1.8 冻结一行多行表头1.9 分割视图 2.日期相关2.1 今日日期快捷键2.2 月份提取 3.数学公式3.1 自动增长3.2 排序3.3 筛选3.4 …

时间、时间戳互转、日期格式化、获取各种天数

我们在工作中经常遇到日期格式的转换,比如获取当前时间,转换当前时间格式为2023/09/09、2023-09-09、2023-09-09 18:12:01、时间戳、时间戳转日期、日期转时间戳、获取当前季度,获取上一季度、获取下一季度、获取下一周,获取上一周…

Android EditText setTranslationY导致输入法覆盖问题

平台 RK3288 Android 8.1 显示: 1920x1080 160 dpi 概述 碰到一个问题: 弹出的输入法会覆盖文本输入框。 原因:输入框使用了setTranslationY() 位置偏移后, 输入法无法正确获取焦点的位置。 分析 先上图: 初始布局 调用etTranslation…

【GO语言基础】基本数据类型

系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录数据类型数值型:整数类型:浮点数类型: 字符型-布尔型-字符串零值转义字符 常用类型转换运算符总结 数据…

matplotlib从起点出发(8)_Tutorial_8_Legend

1 图例教程 在matplotlib中灵活地生成Legend。 本图例指南是legend()中可用文档的扩展——在继续阅读本指南之前,请确保你熟悉legend()文档的内容。 本指南使用了一些常用术语,为清楚起见,此处记录了这些术语: legend entry 图…

【Image captioning】S2 Transformer for Image Captioning 实现流程

S2 Transformer for Image Captioning 实现流程 作者:安静到无声 个人主页 目录 S2 Transformer for Image Captioning 实现流程环境设置数据准备训练评价离线评估在线评估参考文献和引用参考引用致谢推荐专栏环境设置 克隆此存

代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

122.买卖股票的最佳时机II 本题解法很巧妙&#xff0c;大家可以看题思考一下&#xff0c;在看题解。 代码随想录 public int maxProfit(int[] prices) {int result 0;for (int i 1; i < prices.length; i) {result Math.max(prices[i] - prices[i - 1], 0);}return re…

【可定制、转换时间戳】解析nc文件,并保存为csv文件

解析nc文件&#xff0c;并保存为csv文件 写在最前面解析nc文件&#xff08;代码汇总放最后面&#xff09;读取nc文件获取气象文件中所有变量解析时间解析部分代码汇总 写入csv文件 写在最前面 愿称之为&#xff1a;支持私人订制、非常完美的版本 参考&#xff1a; 解析部分参…

C 风格文件输入/输出---无格式输入/输出

C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数&#xff0c;而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 无格式输入/输出 从文件流获取字符 std::fgetc, std::getc …