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中使用ElementTree解析XML示例
Jun 02 Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
用python记录运行pid,并在需要时kill掉它们的实例
Jan 16 Python
代码分析Python地图坐标转换
Feb 08 Python
Python 中字符串拼接的多种方法
Jul 30 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Django重置migrations文件的方法步骤
May 01 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
PyQt5多线程刷新界面防假死示例
Dec 13 Python
python代码中怎么换行
Jun 17 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 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/09/06 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
PHP eval函数使用介绍
2013/12/08 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
Python入门教程之if语句的用法
2015/05/14 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
通过代码实例了解Python异常本质
2020/09/16 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
消防战士优秀事迹材料
2014/02/13 职场文书
《乌塔》教学反思
2014/02/17 职场文书
2014年迎新年联欢会活动策划方案
2014/02/26 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL
AngularJS实现多级下拉框
2022/03/25 Javascript