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

设置使用熊猫应用[重复]

梁丘佑运
2023-03-14

试图弄清楚为什么下面的函数返回可怕的SettingBackCopyWarning...这是我的函数,它打算通过引用修改数据框df

def remove_outliers_by_group(df, cols):
    """
    Removes outliers based on median and median deviation computed using cols
    :param df: The dataframe reference
    :param cols: The columns to compute the median and median dev of
    :return:
    """
    flattened = df[cols].as_matrix().reshape(-1, )
    median = np.nanmedian(flattened)
    median_dev = np.nanmedian(np.abs(flattened) - median)
    for col in cols:
        df[col] = df[col].apply(lambda x: np.nan if get_absolute_median_z_score(x, median, median_dev) >= 2 else x)

不符合要求的行是df[col]=df[col].apply(lambda x:np.nan,如果获得绝对中位数z_分数(x,中位数,中位数)

试图在数据帧切片的副本上设置值。尝试改用.loc[row\u indexer,col\u indexer]=value

请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-查看与复制df[col]=df[col]。应用(λx:np.nan,如果获得绝对值、中位数、中位数、偏差)

我不明白的是,我到处都能看到这种模式,使用类似于df['a']=df['a'].apply(lambda x:…),所以我无法想象他们都做错了。

我做错了吗?最好的方法是什么?我想修改原始数据帧。

谢谢你的帮助。


共有2个答案

艾弘义
2023-03-14

问题是由于重新分配,而不是因为您使用了apply

SettingBackCopyWarning是在赋值中检测到链式索引的警告。这并不一定意味着出了什么问题。

为了避免警告,建议使用如下.loc

df.loc[:,col]=df[col].应用(…)

崔博延
2023-03-14

确保df是否是另一个数据帧的副本。在这种情况下,您应该像这样编写代码

df=df_test.copy()

这将确保df是副本而不是视图。

从以下链接了解有关此警告的更多信息

https://www.youtube.com/watch?v=4R4WsDJ-KVc

 类似资料:
  • 我试图在将数据帧与另一个数据帧合并后更改数据帧中的值,并遇到一些问题(在合并之前似乎不是问题)。 我正在索引和更改数据帧中的值: 随后,我使用merge连接了两个索引(左外连接)(我意识到left.join(右)也可以)。此后,当我使用iloc执行相同的值分配时,我收到以下警告: 对链接文档的审查不会澄清理解,因此,我是否使用了错误的iloc切片方法?(请记住,出于代码的目的,我需要基于位置的切片

  • 对使用. locs进行索引/切片的赋值有一个一般性问题。 假设以下数据帧df: 要复制的代码: 我创建df1使用: 然后,我根据B中的值,使用以下公式为C赋值: 作业正常工作,但我收到一个SettingBackCopy警告。是我做错了什么,还是这是预期的功能?我认为使用. loc可以避免链式赋值。是不是我错过了什么?我正在使用熊猫14.1

  • 我想用替换大于任意数字(本例中为100)的

  • 问题内容: 我有两列,将集存储在数据框中。 我想使用快速向量化操作在两列上执行集合并集 但是错误使我无法这样做,因为我在两列中都输入了内容。 有解决这个问题的好方法吗? 问题答案: 对于这些操作,纯Python可能更有效。 如果我们可以使用,则可能会花费一半的时间(继承可能不值得): 时序的DataFrame:

  • 问题内容: 假设我用两列(一个DateTime)和一个(整数)创建了一个熊猫DataFrame 。现在,我想根据第一列()中的值创建一个DatetimeIndex : 一切似乎都正常,除了我打印DataFrame时,它说它具有Int64Index。 我是在做错事还是不正确理解Indeces的概念? 问题答案: 没有就位(除非您通过)。否则一切正确 同样作为参考,在即将到来的0.12版本(下周)中,

  • 查看以下: 问题是它不会在ipython笔记本中按默认值打印所有行,但我必须切片才能查看结果行。即使以下选项也不会更改输出: 有人知道如何显示整个阵列吗?