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操作列表之List.insert()方法的使用
May 20 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
更新修改后的Python模块方法
Mar 03 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
python脚本后台执行方式
Dec 21 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
Python 使用生成器代替线程的方法
Aug 04 Python
Python操作CSV格式文件的方法大全
Jul 15 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 文件夹删除、php清除缓存程序
2009/08/25 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
php冒泡排序与快速排序实例详解
2015/12/07 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
python二分法实现实例
2013/11/21 Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
python3生成随机数实例
2014/10/20 Python
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
校园报刊亭创业计划书
2014/01/02 职场文书
语文教学感言
2014/02/06 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
精神病医院见习报告
2014/11/03 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
《金色的草地》教学反思
2016/02/17 职场文书