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 文件和路径操作函数小结
Nov 23 Python
python中的对象拷贝示例 python引用传递
Jan 23 Python
Python Deque 模块使用详解
Jul 04 Python
Python算法应用实战之队列详解
Feb 04 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
关于python字符串方法分类详解
Aug 20 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 Python
python 如何用map()函数创建多线程任务
Apr 07 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
session在PHP大型web应用中的使用
2011/06/25 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
PHP中soap的用法实例
2014/10/24 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
PHP实现的策略模式示例
2019/03/20 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python分割和拼接字符串
2013/11/01 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
django 多数据库及分库实现方式
2020/04/01 Python
如何查看python关键字
2021/01/17 Python
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
前厅部经理岗位职责范文
2014/02/04 职场文书
入学生会自荐书范文
2014/02/05 职场文书
化妆品店促销方案
2014/02/24 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
个人主要事迹材料
2014/08/26 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
同事打架检讨书
2015/05/06 职场文书
十二生肖观后感
2015/06/12 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书