【问题标题】:Pandas -- String of boolean conditions -- SettingWithCopyWarningPandas -- 布尔条件字符串 -- SettingWithCopyWarning
【发布时间】:2018-08-28 15:10:42
【问题描述】:

我想知道是否有人可以帮助我解决我在代码中收到的警告。代码确实对项目进行了正确评分,但是这个警告让我很烦,而且我似乎找不到一个好的解决方法,因为我需要将一些布尔条件串在一起。

背景:假设我有一个神奇的水果标识符,并且我有一个 csv 文件,其中列出了已识别的水果以及在哪个区域(1、2 等)。我在 csv 文件中读取了“FruitID”和“Area”列。区域 1 中“苹果”或“苹果”的识别被评分为正确/正确(其他识别的水果不正确/错误)。我将类似的逻辑应用于其他领域,但我不会深入探讨。

关于如何纠正这个问题的任何想法?我应该使用.loc,尽管我不确定这是否适用于多个布尔值。谢谢!

我的启动 CopyWarning 的代码 sn-p:

Area1_ID_df['Area 1, Score']=(Area1_ID_df['FruitID']=='APPLE')|(Area1_ID_df['FruitID']=='apple')

堆栈跟踪:

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

【问题讨论】:

    标签: python pandas boolean


    【解决方案1】:

    Pandas 发现您正在尝试做的事情模棱两可。某些操作会返回数据集的视图,而其他操作会创建数据集的副本。困惑在于您是要修改数据集的副本,还是要修改原始数据集或尝试创建新数据。

    https://www.dataquest.io/blog/settingwithcopywarning/ 是一个很好的链接,可以让您详细了解您遇到的问题。

    【讨论】:

    • 谢谢!非常感谢。
    【解决方案2】:

    如果导致此错误的行确实是:s = t | u,其中tu 是一致索引的布尔系列,您不必担心SettingWithCopyWarning

    这是一个警告,而不是一个错误。后者表示有问题,前者表示可能有问题。在这种情况下,Pandas 猜测您可能正在使用副本而不是视图。

    如果结果如您所愿,您可以放心地忽略警告。

    【讨论】:

    • 感谢您的回复!有趣的是代码正确地计算了事情。我会继续关注事情并谨慎地忽略警告。 :)
    猜你喜欢
    • 2022-01-06
    • 2017-07-15
    • 2013-06-13
    • 1970-01-01
    • 2010-10-15
    • 2016-02-27
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多