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迭代用法实例教程
Sep 08 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
python每天定时运行某程序代码
Aug 16 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
Python3爬虫中Ajax的用法
Jul 10 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
如何基于Django实现上下文章跳转
Sep 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模拟HTTP认证
2006/10/09 PHP
一个PHP日历程序
2006/12/06 PHP
php静态文件生成类实例分析
2015/01/03 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
Python发送email的3种方法
2015/04/28 Python
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
python实现多层感知器
2019/01/18 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
python关闭占用端口方式
2019/12/17 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Python @property及getter setter原理详解
2020/03/31 Python
python实现xml转json文件的示例代码
2020/12/30 Python
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
英语道歉信范文
2014/01/09 职场文书
爱之链教学反思
2014/04/30 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
学校运动会报道稿
2014/09/23 职场文书
租车协议书
2015/01/27 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
Python装饰器的练习题
2021/11/23 Python
redis复制有可能碰到的问题汇总
2022/04/03 Redis