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读取注册表中值的方法
Apr 08 Python
Python爬取读者并制作成PDF
Mar 10 Python
Python脚本处理空格的方法
Aug 08 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
Aug 04 Python
python 实现UTC时间加减的方法
Dec 31 Python
python交互界面的退出方法
Feb 16 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
Python max函数中key的用法及原理解析
Jun 26 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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
用PHP函数解决SQL injection
2006/10/09 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
node express使用HTML模板的方法示例
2019/08/22 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
python基于递归解决背包问题详解
2019/07/03 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
Java里面有没有全局变量?为什么?
2015/02/06 面试题
Linux操作面试题
2012/05/16 面试题
旷课检讨书1000字
2014/02/14 职场文书
2014政务公开实施方案
2014/02/19 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
合作协议书格式
2014/08/19 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python