对SettingWithCopyWarning的理解

时间:2019-03-17 06:49:49

标签: python pandas copy

我有如下代码。我收到了SettingWithCopyWarning条消息。但是,如果我在最后一条语句之后检查3个数据帧,则只有df_numeric['class']的值为99。在其他两个数据帧class的值保持不变。为什么?我认为由于SettingWithCopyWarning,在最后一个语句class之后,所有数据框中的值都会改变

请说明发生了什么事

import pandas as pd
import numpy as np
data = [['Alex',10,5,0],['Bob',12,4,1],['Clarke',13,6,0],['brke',15,1,0]]
df = pd.DataFrame(data,columns=['Name','Age','weight','class'],dtype=float) 

df_numeric=df.select_dtypes(include='number')#, exclude=None)[source]
df_non_numeric=df.select_dtypes(exclude='number')

df_non_numeric['class']=df_numeric['class'].copy()

df_numeric['class']=99

1 个答案:

答案 0 :(得分:1)

这里是一个快速解答。这是pandas中最常见的警告

就像Understanding SettingwithCopyWarning in pandas所说的那样,SettingwithCopyWarning会通知您您的操作可能未达到预期的效果,因此应检查结果以确保您没有记错。


SettingwithCopyWarning

的原因

df2通常在您尝试为原始数据帧df1的子集df1分配新值

时发生

但是原始数据框{{1}}完全没有改变!

enter image description here [图片来自Understanding SettingwithCopyWarning in pandas]

如何确定呢?

  1. 我建议您仔细阅读这篇Understanding SettingwithCopyWarning in pandas帖子,并提供详细的说明和示例代码
  2. 就像@ anky_91说的那样,您可以浏览评论列表中的帖子

希望你一团糟!