如果未定义索引操作返回视图还是副本,那么 pandas 中的视图有何意义?

2023-11-23

我已经从 R 切换到 pandas。当我做类似的事情时,我经常得到SettingWithCopyWarnings

df_a = pd.DataFrame({'col1': [1,2,3,4]})    

# Filtering step, which may or may not return a view
df_b = df_a[df_a['col1'] > 1]

# Add a new column to df_b
df_b['new_col'] = 2 * df_b['col1']

# SettingWithCopyWarning!!

我想我理解这个问题,尽管我很乐意了解我做错了什么。在给定的示例中,未定义是否df_b是对df_a或不。因此,分配给的效果df_b不清楚:是否有影响df_a?该问题可以通过在过滤时显式进行复制来解决:

df_a = pd.DataFrame({'col1': [1,2,3,4]})    

# Filtering step, definitely a copy now
df_b = df_a[df_a['col1'] > 1].copy()

# Add a new column to df_b
df_b['new_col'] = 2 * df_b['col1']

# No Warning now

我认为我遗漏了一些东西:如果我们永远无法真正确定我们是否创建了视图,那么视图有什么用呢?来自熊猫文档(http://pandas-docs.github.io/pandas-docs-travis/indexing.html?highlight=view#indexing-view-versus-copy)

除了简单的情况之外,很难预测它是否[getitem] 将返回一个视图或副本(这取决于数组的内存布局,pandas 对此不做保证)

对于不同的索引方法可以找到类似的警告。

我发现在我的代码中散布 .copy() 调用非常麻烦且容易出错。我是否使用了错误的风格来操作我的数据帧?或者性能增益是否如此之高,以至于证明了明显的尴尬是合理的?


好问题!

简短的回答是:这是 pandas 的一个缺陷,正在被修复。

您可以找到有关本质的更长的讨论问题在这里,但主要的收获是,我们现在正在转向“写时复制”行为,在这种行为中,任何时候你进行切片,你都会得到一个新的副本,并且你永远不必考虑视图。修复很快就会解决这个问题重构项目。我实际上尝试直接修复它(see here),但在当前架构中这是不可行的。

事实上,我们会将视图保留在后台 - 当可以提供它们时,它们使 pandas 超级内存高效且快速 - 但我们最终会将它们对用户隐藏,因此,从用户的角度来看,如果您进行切片、索引,或者剪切一个 DataFrame,你得到的实际上将是一个新的副本。

(这是通过在用户仅读取数据时创建视图来完成的,但每当使用赋值操作时,视图将在赋值发生之前转换为副本。)

最好的猜测是修复将在一年内完成——与此同时,我担心有人.copy()可能有必要,抱歉!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果未定义索引操作返回视图还是副本,那么 pandas 中的视图有何意义? 的相关文章

  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ
  • 如何返回 cost, grad 作为 scipy 的 fmin_cg 函数的元组

    我怎样才能使 scipy 的fmin cg使用一个返回的函数cost and gradient作为元组 问题是有f对于成本和fprime对于梯度 我可能必须执行两次操作 非常昂贵 grad and cost被计算 此外 在它们之间共享变量可
  • 使用什么来移动 UIView self.frame 或 self.transform 属性?

    这个问题我有点困惑 我知道我可以改变观点self frame origin 但我发现有一个名为 变换 的属性 我认为这是用于在屏幕上移动我的视图等 也许我有点不明白 所以我想知道 我必须使用哪个房产来搬家UIView 或者它的子类 另一个类
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • Matplotlib:如何有效地将大量线段着色为独立渐变

    Python 绘图库 如何有效地将大量线段着色为独立渐变 已经 阅读this https stackoverflow com questions 8500700 how to plot a gradient color line in ma
  • 创建上下文后将 jar 文件添加到 pyspark

    我正在笔记本上使用 pyspark 并且不处理 SparkSession 的创建 我需要加载一个包含一些我想在处理 rdd 时使用的函数的 jar 您可以使用 jars 轻松完成此操作 但在我的特定情况下我无法做到这一点 有没有办法访问sp
  • 使用 Paramiko 进行 DSA 密钥转发?

    我正在使用 Paramiko 在远程服务器上执行 bash 脚本 在其中一些脚本中 存在与其他服务器的 ssh 连接 如果我只使用 bash 不使用 Python 我的 DSA 密钥将被第一个远程服务器上的 bash 脚本转发并使用 以连接
  • 协程从未被等待

    我正在使用一个简单的上下文管理器 其中包含一个异步循环 class Runner def init self self loop asyncio get event loop def enter self return self def e
  • Python Anaconda:如何测试更新的库是否与我现有的代码兼容?

    我在 Windows 7 机器上使用 Python 2 7 Anaconda 安装进行数据分析和科学计算 当新的库发布时 例如新版本的 pandas patsy 等 您建议我如何测试新版本与现有代码的兼容性 是否可以在同一台机器上安装两个
  • Spark 和 Python 使用自定义文件格式/生成器作为 RDD 的输入

    我想问一下 Spark 中输入的可能性 我可以看到从http spark apache org docs latest programming guide html http spark apache org docs latest pro
  • python中basestring和types.StringType之间的区别?

    有什么区别 isinstance foo types StringType and isinstance foo basestring 对于Python2 basestring是两者的基类str and unicode while type
  • 查找 Pandas DF 行中的最短日期并创建新列

    我有一个包含多个日期的表 有些日期将为 NaN 我需要找到最旧的日期 所以一行可能有 DATE MODIFIED WITHDRAWN DATE SOLD DATE STATUS DATE 等 因此 对于每一行 一个或多个字段中都会有一个日期
  • 从 Flask 运行 NPM 构建

    我有一个 React 前端 我想在与我的 python 后端 API 相同的源上提供服务 我正在尝试使用 Flask 来实现此目的 但我遇到了 Flask 找不到我的静态文件的问题 我的前端构建是用生成的npm run build in s
  • Airflow 1.9 - 无法将日志写入 s3

    我在 aws 的 kubernetes 中运行气流 1 9 我希望将日志发送到 s3 因为气流容器本身的寿命并不长 我已经阅读了描述该过程的各种线程和文档 但我仍然无法让它工作 首先是一个测试 向我证明 s3 配置和权限是有效的 这是在我们
  • Python bug - 或者我的愚蠢 - 扫描字符串文字时 EOL

    我看不出以下两行之间有显着差异 然而第一个解析 而后者则不解析 In 5 n Axis of Awesome In 6 n Axis of Awesome File
  • 无法通过 Python 子进程进行 SSH

    我需要通过堡垒 ssh 进入机器 因此 该命令相当长 ssh i
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 如何获取pandas中groupby对象中的组数?

    我想知道有多少个独特的组需要执行计算 给定一个名为 groupby 的对象dfgroup 我们如何找到组的数量 简单 快速 Pandaic ngroups 较新版本的 groupby API pandas gt 0 23 提供了此 未记录的
  • 将 Keras 集成到 SKLearn 管道?

    我有一个 sklearn 管道 对异构数据类型 布尔 分类 数字 文本 执行特征工程 并想尝试使用神经网络作为我的学习算法来拟合模型 我遇到了输入数据形状的一些问题 我想知道我想做的事情是否可能 或者我是否应该尝试不同的方法 我尝试了几种不
  • 定义在文本小部件中双击时选择哪些字符

    在 Windows 上 双击文本小部件中的单词也将选择连接的标点符号 有什么方法可以定义您想要选择的角色吗 tcl wordchars该变量的值是一个正则表达式 可以设置它来控制什么被视为 单词 字符 例如 通过双击 Tk 中的文本来选择单

随机推荐

  • 将 Word 文档文本转换为 HTML 的库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有一个 Net开源库可以将word文档转换为HTML以在网页内显示 我知道有几种将 word 文档转换为 html 文件的工具 但我的要求是在
  • Rails 3.1 身份映射问题?

    有谁知道 Rails 3 1 IdentityMap 功能的关键问题导致默认情况下强制禁用该功能 我确信存在一些小具体问题 但是在为已构建的 Rails 3 1 应用程序启用它之前 是否有任何人应该注意的重大问题 来自代码中的注释 Acti
  • python-opencv AttributeError:“模块”对象没有属性“createBackgroundSubtractorGMG”

    我正在尝试遵循以下中给出的教程 https opencv python tutroals readthedocs org en latest py tutorials py video py bg subtraction py bg sub
  • 在 Mac OS 上设置 tkinter 图标

    我正在尝试更改 Mac OS 的 tk 应用程序上显示的图标 上次我检查此代码适用于 Windows 目标是使该解决方案能够跨所有平台工作 root tk Tk app Application master root app master
  • Clion 无法识别我的快速工具链路径

    我正在尝试为 swift 项目配置 clion 但它无法识别 swift 工具链路径 which swift 产生输出 usr bin swift bin swift 所以工具链就在那里 但 clion 只是不认识它 我该如何进行这项工作
  • jQuery 工具提示 onClick?

    我已经找了很长时间了 似乎找不到一个使用以下内容的 jQuery 工具提示插件 onClick 代替hover 使其像切换按钮一样工作 淡入淡出 使用工具提示的想法是 我有一些想要在其中显示内容的链接 虽然普通的工具提示 这可能是我出错的地
  • 如何在 Windows 上安装 pip?

    pip是替代品easy install 但我应该安装pip using easy install在 Windows 上 有没有更好的办法 Python 3 4 和 2 7 9 好消息 Python 3 4 2014 年 3 月发布 和Pyt
  • MySQL 表的主键是否应该公开?

    我有许多描述模型的 MySQL 表 例如 用户 业务 等 这些表的主键是否应该暴露给客户端 我主要是从安全角度来问 但是还有其他我没有想到的考虑因素吗 暴露您的主键 特别是如果它们是可预测的 是一个称为不安全直接对象引用的漏洞 通过使用如下
  • 如何设置 NSDate 上的时间?

    我想用我想要的小时 分钟 秒设置 NSDate 时间 目前我正在使用 NSDate 组件 但它没有给出期望的结果 comps setHour hours comps setMinute 0 comps setSecond 0 NSDate
  • 有人有 SourceForge 的 Xselerator XSL IDE 副本吗? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我多年来一直使用 Marrowsoft Xselera
  • 使用 python pandas 比较两个 csv 文件

    我有两个 csv 文件 均由两列组成 第一个具有产品 ID 第二个具有序列号 我需要查找第一个 csv 中的所有序列号 并在第二个 csv 上查找匹配项 结果报告将在单独的列中包含匹配的序列号以及每个 csv 中相应的产品 ID 我确实修改
  • ASP.NET MVC 4 C# HttpPostedFileBase,如何存储文件

    Model public partial class Assignment public Assignment this CourseAvailables new HashSet
  • 我可以使用 Boost.Asio 在多线程 I/O 服务上同步读取套接字并设置超时吗?

    我有一个使用 Boost Asio 进行 TCP 和 UDP 套接字通信的应用程序 我知道 Asio 中的 A 代表异步 因此该库致力于鼓励您尽可能使用异步 I O 我有一些情况 同步套接字读取更可取 但与此同时 我想为所述接收调用设置超时
  • created_at 字段有时会变成 nil

    I think created at总是设置为ActiveRecord创建记录的时间 但我发现有些记录是用null创建的created at 有什么条件可以导致这种情况吗 这些列created at updated at created o
  • 使用 google-rfc-2445 (iCalendar) 时,某些情况下会返回开始日期

    我运行了很多 RRULE 只是为了测试性能谷歌 rfc 2445 Java 实现IETF RFC 2445 日历 我发现在某些情况下我在方法的返回列表中得到了开始日期 测试非常简单 private static void runGoogle
  • ReactJS中如何处理多选表单

    我尝试处理一个多种表单选择选项 在 ReactJS 中 我试图激发 javascript 经典代码的灵感来处理这个问题 但我失败了 我的代码只是不向我发送所选的值 怎么处理呢 这是我的代码 class ChooseYourCharacter
  • 如何在 ExtJS 4 中实现流程布局?

    我想使用一种布局 其中组件像 hbox 一样水平添加 但在添加时 如果组件超出容器的边界 则会移动到下一行 这与swing和flex中的FlowLayout类似 我在 ExtJS 4 0 中找不到任何可以实现此目的的布局 所以我想知道我将如
  • 如何使两个函数参数隐式

    假设我们有一个以函数作为参数的对象apply method object Wrapper def apply block TypeA gt String TypeA a block a TypeA是应用程序的域类型 现在 当我定义内联块时
  • JavaFX ScrollPane 以编程方式移动视口 - 使内容居中

    我可以使用 setVvalue double 和 setHvalue double 方法在 JavaFX ScrollPane 中移动视口 我正在努力做的是根据其位置将特定节点置于滚动窗格内容的中心 我尝试过 localToScene 和b
  • 如果未定义索引操作返回视图还是副本,那么 pandas 中的视图有何意义?

    我已经从 R 切换到 pandas 当我做类似的事情时 我经常得到SettingWithCopyWarnings df a pd DataFrame col1 1 2 3 4 Filtering step which may or may