您的位置: 网站首页> Pandas教程> 当前文章
SettingWithCopyWarning: value is trying to be set on a copy of a slice
老董-我爱我家房产SEO2020-10-05188围观,134赞
pandas在使用过程中会遇见这个错误: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 See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy。这个错误在赋值一列的时候出现频率比较高。原因安在呢?
本节课我们先感受下这个错误,然后分析这个错误的原因,最后再找出解决办法。
1、复现错误
# -*- coding: utf-8 -*- import pandas as pd df = pd.read_excel('test.xlsx') print(df) print('------------------') # 对温度>20的算一下温差 res = df['高温'] > 20 df[res]['温差'] = df['高温'] - df['低温'] print(df)
城市 高温 低温 0 北京 28 10 1 上海 25 7 2 广州 16 5 3 深圳 17 10 ------------------ D:/pyscript/py3script/python66/test2/test.py:8: 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 See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy df[res]['温差'] = df['高温'] - df['低温'] 城市 高温 低温 0 北京 28 10 1 上海 25 7 2 广州 16 5 3 深圳 17 10
2、错误分析
上述的操作其实是2个步骤,先从df选择一部分,然后再对其修改。但是pandas无法确定你要在原始df基础上操作还是要复制一个子df出来单独操作,所以才会报这个错!
3、解决方法(2种,1种是loc选择器,另1种是copy函数)
# -*- coding: utf-8 -*- import pandas as pd df = pd.read_excel('test.xlsx') print(df) print('------------------') # 对温度>20的算一下温差 res = df['高温'] > 20 df.loc[res,'温差'] = df['高温'] - df['低温'] print(df)
城市 高温 低温 0 北京 28 10 1 上海 25 7 2 广州 16 5 3 深圳 17 10 ------------------ 城市 高温 低温 温差 0 北京 28 10 18.0 1 上海 25 7 18.0 2 广州 16 5 NaN 3 深圳 17 10 NaN
# -*- coding: utf-8 -*- import pandas as pd df = pd.read_excel('test.xlsx') print(df) print('------------------') # 对温度>20的算一下温差 res = df['高温'] > 20 df2 = df[res].copy() #赋值一个子df df2['温差'] = df['高温'] - df['低温'] print(df2)
城市 高温 低温 0 北京 28 10 1 上海 25 7 2 广州 16 5 3 深圳 17 10 ------------------ 城市 高温 低温 温差 0 北京 28 10 18 1 上海 25 7 18 城市 object 高温 int64 低温 int64 dtype: object
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
SettingWithCopyWarning: value is trying to be set on a copy of a slice文章写得不错,值得赞赏
站点信息
- 网站程序:Laravel
- 客服微信:a772483200