我想知道是否有人可以帮助我解决我的代码中出现的警告。该代码确实对项目进行了评分,但是由于我需要将一些布尔条件组合在一起,因此此警告使我很烦,并且似乎无法找到一个好的解决方案。
背景:想象一下,我有一个神奇的水果标识符,并且有一个csv文件,其中列出了识别出的水果以及在哪个区域(1、2等)。我在csv文件中读取了“ FruitID”和“ Area”列。区域1中的“苹果”或“苹果”标识被标记为正确/正确(其他标识的水果不正确/错误)。我在其他领域也采用了类似的逻辑,但我不会赘述。
有关如何更正此问题的任何想法?我不应该使用.loc
,尽管我不确定这是否适用于多个布尔值。谢谢!
我的代码片段启动了CopyWarning:
Area1_ID_df['Area 1, Score']=(Area1_ID_df['FruitID']=='APPLE')|(Area1_ID_df['FruitID']=='apple')
Stacktrace:
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
答案 0 :(得分:0)
熊猫发现您要执行的操作含糊不清。某些操作返回数据集的视图,而其他操作则复制数据集。困惑在于您是要修改数据集的副本还是要修改原始数据集还是要尝试创建新的东西。
https://www.dataquest.io/blog/settingwithcopywarning/是一个很好的链接,可以详细了解您遇到的问题。
答案 1 :(得分:0)
如果真正引起此错误的行是:s = t | u
,其中t
和u
是布尔序列一致的索引,则不必担心SettingWithCopyWarning
。
这是警告,而不是错误。后者表示存在问题,前者表示可能存在问题。在这种情况下,Pandas猜测您可能正在使用副本而不是视图。
如果结果符合预期,则可以放心地忽略警告。