pandas DataFrame 警告(SettingWithCopyWarning)的解决
作者:努力飞翔的猪 发布时间:2023-08-20 07:45:31
刚接触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 5B
Out[2]:
a b
0 1 2
1 2 3
2 3 4B
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被更改时一同被改掉。总之我现在还只是知其然,不知其所以然,希望有大神帮忙解惑。
来源:https://www.cnblogs.com/pig-fly/p/7875472.html


猜你喜欢
- 一、python numpy + matplotlib 画股票k线图# -- coding: utf-8 --import requests
- 众所周知,随着数据库体积的日益庞大,其备份文件的大小也水涨船高。虽然说通过差异备份与完全备份配套策略,可以大大的减小SQL Server数据
- #共有方法 + * instra='人生苦短'strb='我用python'lista=list(range
- class pygame.Rect Rect对象的属性:Rect 表示的区域必须位于一个 Surface 对象之上,比如游戏的主窗口(scr
- <form id="myForm" method="post">
- 阅读目录什么是PrmoisePromise的使用最近在看《你不知道的javascript中卷》,发觉作者花了基本一半的篇幅去讲异步和prom
- 栅格系统的形成1692年,新登基的法国国王路易十四感到法国的印刷水平强差人意,因此命令成立一个管理印刷的皇家特别委员会。他们的首要任务是设计
- 1 修改默认目录最近刚刚开始学习Python,比较好的一个IDE就是jupyter Notebook。可以一个cell一个cell的显示结果
- 1、Git版本库介绍每个Git版本控制系统的主机中,都可以包含若干个本地版本库,一般情况下一个本地版本库对应一个项目,用于对某个特定项目中的
- type是go语法里的重要而且常用的关键字,type绝不只是对应于C/C++中的typedef。搞清楚type的使用,就容易理解go语言中的
- 通常,当一个页面有太多信息要显示,而一页塞又不下所有信。为了请求速度、美观以及其他的各种理由,分页就会被我们请过来。让我们的用户可以选择是否
- 根据TIOBE 编程语言排行榜前20的语言分享相关图书(部分空缺)。在正式介绍编程语言排行之前,你敢不敢先挑战一下自己的编程技能?!测试下自
- 1、什么是触发器 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check
- 1. 安装依赖将PyTorch模型转换为ONNX格式可以使它在其他框架中使用,如TensorFlow、Caffe2和MXNet首先安装以下必
- 说明写了一段时间的java之后,特别不习惯PHP本身的弱类型方式,在写代码的时候总觉得不怎么放心,特别本身PHP又是弱类型的语言,所以在编码
- 用下列代码即可:<%On error resume nextSet session=Creat
- 前提示时间一个博友,建议我提供PHP开发环境的搭建文章。当然我们一般在windows平台下开发的居多,那么,今天我就在Windows平台下搭
- 新下载了一个Pycharm,建了个小demo,期间产生了一个sqlite3文件,由于是第一次打开,就弹出选择打开方式的对话框,手一块直接点了
- 注:Unicode相关知识的详细介绍请参考UTF-8, UTF-16, UTF-32 & BOM。 对于UTF-8/16/32而言,
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换