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实现计算倒数的方法
Jul 11 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 Python
微信跳一跳小游戏python脚本
Jan 05 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
Flask框架工厂函数用法实例分析
May 25 Python
Python实现微信翻译机器人的方法
Aug 13 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 Python
Python打包为exe详细教程
May 18 Python
利用Pycharm连接服务器的全过程记录
Jul 01 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图片加水印原理(超简单的实例代码)
2013/01/18 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
PHP函数extension_loaded()用法实例
2015/01/19 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
装修公司工程部经理岗位职责
2015/04/09 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
公司管理建议书
2015/09/14 职场文书
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
GPU服务器的多用户配置方法
2022/07/07 Servers