当前位置: 首页 > 知识库问答 >
问题:

如何处理熊猫的SettingWithCopyWarning

宰父单弓
2023-03-14
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])

共有1个答案

牟稳
2023-03-14

创建SettingWithCopyWarning是为了标记可能会引起混淆的“链接”赋值,如下面的赋值,它并不总是按预期工作,特别是当第一个选择返回副本时。[有关背景讨论,请参见GH5390和GH5597。]

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
import pandas as pd
pd.options.mode.chained_assignment = None  # default='warn'
    null
 类似资料:
  • 问题内容: 使用nltk时标点和数字小写不起作用。 我的密码 样本输入 预期产量 问题答案: 您的功能 缓慢 且不完整。首先,关于问题- 您不会降低数据的大小写。 您没有正确摆脱数字和标点符号。 您没有返回字符串(您应该使用来加入列表并返回它) 此外,具有文本处理功能的列表理解是引入可读性问题的主要方法,更不用说可能的冗余了(对于出现的每个条件,您可以多次调用函数。 接下来,您的功能有两个明显的低

  • 我有一个熊猫时期对象: 从书(Python for Data Analysis)中,的意思是 季度日期固定在每个月的最后一个日历日,在指定月份(1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月或12月)结束的年份 这到底是什么意思? 从我的常识来看,包括八月、九月和十月。那么在这里如何处理十二月()呢? 任何人都可以简明扼要地解释变量吗?提前感谢您。:)

  • 问题内容: 因此,我了解到可以使用DataFrame.groupby而不用使用MultiIndex进行子采样/横截面。 另一方面,当我在DataFrame上具有MultiIndex时,仍然需要使用DataFrame.groupby进行子采样/横截面。 那么,除了在打印时非常有用和漂亮地显示层次结构之外,MultiIndex有什么好处? 问题答案: 在pandas 0.4版本中引入了分级索引(也称为

  • 我有一个看起来像这样的数据集(最多5列-但可以更少) 我试图使用pandas read_表将其读入一个5列数据帧。我想在没有额外按摩的情况下阅读这篇文章。 如果我尝试 我得到一个错误-“列名有5个字段,数据有3个字段”。 有没有办法让熊猫在读取数据的同时为缺失的列填写NaN?

  • 问题内容: Python 3.4和Pandas 0.15.0 df是一个数据框,而col1是一列。使用下面的代码,我正在检查是否存在值10,并将此类值替换为1000。 这是另一个例子。这次,我将基于索引更改col2中的值。 这两种都会产生以下警告: 最后, 这会产生类似的警告,并带有以下建议: 我不确定我是否理解警告中指出的讨论。编写这三行代码的更好方法是什么? 请注意,该操作有效。 问题答案:

  • 问题内容: 我想将 大于任意数(在这种情况下为100)的值替换为(因为如此大的值表示实验失败)。以前,我使用它来替换不需要的值: 但是,出现以下错误: 从这个StackExchange问​​题来看,有时似乎可以忽略此警告,但是我不能很好地跟踪讨论,无法确定这是否适用于我的情况。警告基本上是让我知道我将覆盖我的某些值吗? 编辑:据我所知,一切都按其应有的方式进行。作为后续措施,我的替换值方法是否非标