如何处理 Pandas 中的SettingWithCopyWarning

2024-01-27

背景

我刚刚将 Pandas 从 0.11 升级到 0.13.0rc1。现在,该应用程序弹出了许多新的警告。其中之一是这样的:

E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
  quote_df['TVol']   = quote_df['TVol']/TVOL_SCALE

我想知道它到底是什么意思?我需要改变什么吗?

如果我坚持使用,该如何暂停警告quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE?

发出警告的函数

def _decode_stock_quote(list_of_150_stk_str):
    """decode the webpage and return dataframe"""

    from cStringIO import StringIO

    str_of_all = "".join(list_of_150_stk_str)

    quote_df = pd.read_csv(StringIO(str_of_all), sep=',', names=list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg')) #dtype={'A': object, 'B': object, 'C': np.float64}
    quote_df.rename(columns={'A':'STK', 'B':'TOpen', 'C':'TPCLOSE', 'D':'TPrice', 'E':'THigh', 'F':'TLow', 'I':'TVol', 'J':'TAmt', 'e':'TDate', 'f':'TTime'}, inplace=True)
    quote_df = quote_df.ix[:,[0,3,2,1,4,5,8,9,30,31]]
    quote_df['TClose'] = quote_df['TPrice']
    quote_df['RT']     = 100 * (quote_df['TPrice']/quote_df['TPCLOSE'] - 1)
    quote_df['TVol']   = quote_df['TVol']/TVOL_SCALE
    quote_df['TAmt']   = quote_df['TAmt']/TAMT_SCALE
    quote_df['STK_ID'] = quote_df['STK'].str.slice(13,19)
    quote_df['STK_Name'] = quote_df['STK'].str.slice(21,30)#.decode('gb2312')
    quote_df['TDate']  = quote_df.TDate.map(lambda x: x[0:4]+x[5:7]+x[8:10])
    
    return quote_df

更多警告信息

E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
  quote_df['TVol']   = quote_df['TVol']/TVOL_SCALE
E:\FinReporter\FM_EXT.py:450: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
  quote_df['TAmt']   = quote_df['TAmt']/TAMT_SCALE
E:\FinReporter\FM_EXT.py:453: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
  quote_df['TDate']  = quote_df.TDate.map(lambda x: x[0:4]+x[5:7]+x[8:10])

The SettingWithCopyWarning创建它是为了标记可能令人困惑的“链式”分配,例如以下内容,它并不总是按预期工作,特别是当第一个选择返回copy. [see GH5390 https://github.com/pydata/pandas/pull/5390 and GH5597 https://github.com/pydata/pandas/issues/5597用于背景讨论。]

df[df['A'] > 2]['B'] = new_val  # new_val not set in df

该警告提供了重写建议,如下所示:

df.loc[df['A'] > 2, 'B'] = new_val

但是,这不适合您的用法,这相当于:

df = df[df['A'] > 2]
df['B'] = new_val

虽然很明显您并不关心写入使其返回到原始帧(因为您正在覆盖对它的引用),但不幸的是,这种模式无法与第一个链式分配示例区分开来。因此出现(误报)警告。误报的可能性在关于索引的文档 https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy,如果您想进一步阅读。您可以通过以下分配安全地禁用此新警告。

import pandas as pd
pd.options.mode.chained_assignment = None  # default='warn'

其他资源

  • pandas 用户指南:索引和选择数据 https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html
  • Python 数据科学手册:数据索引和选择 https://jakevdp.github.io/PythonDataScienceHandbook/03.02-data-indexing-and-selection.html
  • 真正的Python:Pandas 中的SettingWithCopyWarning:视图与副本 https://realpython.com/pandas-settingwithcopywarning/
  • Dataquest:SettingwithCopyWarning:如何修复 Pandas 中的此警告 https://www.dataquest.io/blog/settingwithcopywarning/
  • 迈向数据科学:解释 pandas 中的 SettingsWithCopyWarning https://towardsdatascience.com/explaining-the-settingwithcopywarning-in-pandas-ebc19d799d25
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 Pandas 中的SettingWithCopyWarning 的相关文章

随机推荐

  • 找不到为 MVC 5 DropDownListFor 添加占位符的方法

    我尝试在网络上搜索并用我的代码尝试不同的东西 我知道如何为文本框添加占位符 但是为 MVC 5 下拉列表添加一个占位符怎么样 我有以下代码 但不会将占位符放入下拉列表中 Html DropDownListFor model gt model
  • Constexpr 类:继承?

    首先 我正在使用 Clang 3 4 1 我正在编写一个全局变量 它必须充当编译时上下文的占位符 主要作为值模板参数 为此 我编写了一个名为的 constexpr 类chameleon 它模仿任何运行时值的行为 struct chamele
  • c++11 及更高版本中 mutex.lock() 和 .unlock() 的确切线程间重新排序约束是什么?

    根据https en cppreference com w cpp atomic memory order https en cppreference com w cpp atomic memory order mutex lock and
  • 帮助菜单缺失部分 - Eclipse Luna

    我正在 Eclipse Luna 中工作 安装 Oracle Enterprise Pack for Eclipse OEPE 后 帮助菜单显示缺少项目 我附上屏幕截图 丢失物品 另外 我检查了菜单可见性 检查更新 安装新软件 安装细节 等
  • mypy 设置字典键/接口

    假设我有一个以字典作为参数的函数 def f d dict gt None x d x print x 我可以指定这本词典吗must有钥匙 x 到我的 我正在寻找类似的东西打字稿的界面 https www typescriptlang or
  • 如何在 Eclipse CDT 中配置特定的 GCC 交叉工具链?

    我导入了一些源代码C Makefile Project到 Eclipse CDT 工作区 并指定Cross GCC 索引器设置 工具链 项目导入进展顺利 但包含路径设置仅指向我当前的本机主机 GCC 实现 我一直在寻找Toolchain E
  • JavaScript:如何将额外参数传递给回调[重复]

    这个问题在这里已经有答案了 我有一个问题困扰了我一段时间 假设我有以下数组 var array 1 2 3 现在我有一个与此类似的功能 function print num str console log str num 是否可以调用 fo
  • Net Core 2.1 通用主机即服务

    我正在尝试使用最新的 Dotnet Core 2 1 运行时构建 Windows 服务 我不托管任何 aspnet 我不希望或不需要它来响应 http 请求 我遵循了示例中的代码 https github com aspnet Docs t
  • 我可以在 ARView 中使用缩放功能吗?

    我希望我的用户在 AR 应用程序中使用缩放 可以使用 ARView 进行缩放吗 我编写了以下代码并将其添加到点击操作中 let discoverySession AVCaptureDevice DiscoverySession device
  • 如何在 R 中使用 `tryCatch` 正确记录警告和错误?

    我有一个函数fun通常会产生警告 偶尔会引发错误 我正在尝试使用tryCatch记录警告和错误 如建议的那样这个答案 https stackoverflow com a 57658252 5252007 如何同时存储警告和错误 这是一个最小
  • gdb:如何列出打开的文件

    我想知道是否有可能获得调试应用程序已打开但未从 GDB 本身关闭的文件 目录列表 目前我设置了一个断点 然后使用外部程序 例如lsof检查打开的文件 但这种做法确实很烦人 环境 Debian Lenny 和 gdb v6 8 EDIT 我这
  • 在 Kubernetes 上使用 Spring Boot Admin 监控副本

    我在 Kubernetes 上设置了一个 Spring Boot 管理客户端 并扩展到 3 个副本 但是当我尝试检查实例时 管理服务器只显示一个 为了让 SBA Spring Boot 管理员 了解您的服务的三个实例是不同的 您需要确保每个
  • 为什么 C# 中的构造函数不被继承?

    我猜想 C 继承中有一些非常基本的东西我不明白 有人请启发我吗 有时 在子类化时 您希望限制创建类实例所需的条件 让我举一个例子 如果类确实继承了其超类构造函数 则所有类都将具有来自的无参数构造函数Object 显然这是不正确的
  • R下载文件重定向

    您好 我正在参加在线课程并尝试下载rda教授提供的数据集 我尝试运行与课程中提供的完全相同的命令 download file https dl dropbox com u 7710864 courseraPublic samsungData
  • 如何有效地搜索这个层次结构?

    我有一个如下所示的数据结构 public class Node public string Code get set public string Description get set public List
  • 错误“无法下载,$GOPATH 未设置。”

    Setup 看看我的配置 echo GOPATH ls r GOPATH home cyrus go src pkg bin echo GOROOT ls GOROOT usr local go api AUTHORS bin CONTRI
  • 使用 PHP 进行错误级别分析

    我不是编码员 但我确实理解逻辑 通常我能够使用 PHP 进行简单的编码 我正在寻求实施错误级别分析使用 PHP 你可以看到一个例子这个链接 http fotoforensics com 是否可以使用 ImageMagick 或 GD 来实现
  • PHP mail() 附件问题

    有人能帮我弄清楚为什么这总是返回错误吗 to email protected cdn cgi l email protection from Website lt email protected cdn cgi l email protec
  • Java / Kotlin / Spring Boot。如何在异常发生时自动获取参数值?

    考虑到我们正在使用Kotlin Spring Boot 注释等相关库 如果我们的代码抛出异常 我们如何在异常发生时自动检索方法参数值 我们可以使用 AOP Spring 拦截器或其他技术来做到这一点吗 我们希望用它来丰富我们的错误消息 以便
  • 如何处理 Pandas 中的SettingWithCopyWarning

    背景 我刚刚将 Pandas 从 0 11 升级到 0 13 0rc1 现在 该应用程序弹出了许多新的警告 其中之一是这样的 E FinReporter FM EXT py 449 SettingWithCopyWarning A valu