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 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
深入了解Python数据类型之列表
Jun 24 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
Mar 30 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
python3爬取torrent种子链接实例
Jan 16 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
python使用pymysql模块操作MySQL
Jun 16 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实现把数字ID转字母ID
2013/08/12 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
基于jquery的表格排序
2010/09/11 Javascript
Js切换功能的简单方法
2010/11/23 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
Python requests设置代理的方法步骤
2020/02/23 Python
Python 如何测试文件是否存在
2020/07/31 Python
struct与class的区别
2014/02/03 面试题
奖学金自我鉴定范文
2013/10/03 职场文书
酒店个人培训自我鉴定
2013/12/11 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
2014年医院工作总结
2014/11/20 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
MySQL sql模式设置引起的问题
2022/05/15 MySQL