*** 作 Dataframe 的时候有时会报SettingwithCopyWarning的警告,如下图:
然后吧,你按着他的提示,尝试改用.loc,结果还是没卵用。最后由于懒得检查,索性直接关闭所有警告信息:
import warnings warnings.filterwarnings("ignore")
警告虽不是错误,但直接关闭警告肯定是不对。警告的作用就是告诉你虽然代码语法正确,但也会出现潜在的错误或问题。
原因导致这条告警产生的原因,是由于pandas无法判断对原始Dataframe进行切片,产生的是视图还是副本。如果切片产生的是视图,则赋值 *** 作会修改原始Dataframe,如果产生的是副本,则不会修改原始的Dataframe。
看下面代码演示:
df = pd.Dataframe(np.arange(4*5).reshape(4, 5)) df # 这是原始的Dataframe
下面的 *** 作就会报错:
# 这是一个切片视图 view_df = df.iloc[:,3:4] # 对视图修改时就会报错 view_df.iloc[2:3,:]=0解决方案
下面 *** 作就是正确的:
# 这是一个切片副本 copy_df = df.iloc[:,3:4].copy() # copy一个副本 # 对副本修改时就不会报错 copy_df.iloc[2:3,:]=0
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)