pandas DataFrame 警告(SettingWithCopyWarning)的解决


Posted in Python onJuly 23, 2019

刚接触python不久,编程也是三脚猫,所以对常用的这几个工具还没有一个好的使用习惯,毕竟程序语言是头顺毛驴。所以最近在工作中使用的时候在使用pandas的DataFrame时遇到了以下报警:

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/indexing.html#indexing-view-versus-copy

debug了半天,也在网上找了很多,还是没有解决,在报警的那一句调了半天,后来发现主要问题并不是出现在报警的那一句。

给个例子复现一下这个问题:

import pandas as pd
A = pd.DataFrame([[1,2,3],[2,3,4],[3,4,5]], columns = ['a','b','c'])
B = A[['a', 'b']]
B['a'] = B['a'] + 1 # same result by using B.loc[:,'a'] = B.loc[:,'a']+ 1

输出:

A
Out[1]:
   a  b  c
0  1  2  3
1  2  3  4
2  3  4  5

B
Out[2]:
   a  b
0  1  2
1  2  3
2  3  4

B
Out[3]:
   a  b
0  2  2
1  3  3
2  4  4

先说一下我的感觉:这个报警主要是说,你当前对B的操作可能会改变另一个DataFrame A,所以你要小心了。(当然实际的警告并不是这个意思,但是“在DataFrame的一个切片的copy上进行操作”我感觉不出来有什么问题,还请大神们解答一下。)

报警出现在第4行,但主要的问题在于第3行:应该使用.loc方法得到新的DataFrame,而不是直接使用[]引用。

C = A.loc[:,['a','b']]
C['a'] = C['a']+1

这样就不会出现报警了。

个人感觉好像是说用.loc是对原有DataFrame的一种复制性引用,而[]的引用则是指针性的引用,和python本身的赋值特性有关。不过我看了A的值也并没有在B被更改时一同被改掉。总之我现在还只是知其然,不知其所以然,希望有大神帮忙解惑。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现sublime3的less编译插件示例
Apr 27 Python
跟老齐学Python之传说中的函数编写条规
Oct 11 Python
Python实现在Linux系统下更改当前进程运行用户
Feb 04 Python
python处理二进制数据的方法
Jun 03 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
python实现装饰器、描述符
Feb 28 Python
python如何保证输入键入数字的方法
Aug 23 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
Python 将json序列化后的字符串转换成字典(推荐)
Jan 06 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 #Python
python3.x提取中文的正则表达式示例代码
Jul 23 #Python
Python Pandas 箱线图的实现
Jul 23 #Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 #Python
Pandas分组与排序的实现
Jul 23 #Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 #Python
Django logging配置及使用详解
Jul 23 #Python
You might like
PHP设计模式 注册表模式
2012/02/05 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
python elasticsearch环境搭建详解
2019/09/02 Python
详解KMP算法以及python如何实现
2020/09/18 Python
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
应聘教师推荐信
2013/10/31 职场文书
大学毕业感言
2014/01/10 职场文书
化工专业求职信
2014/07/01 职场文书
单位委托书怎么写
2014/09/21 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
2014年协会工作总结
2014/11/22 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
AngularJS实现多级下拉框
2022/03/25 Javascript
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫