漳州新闻网

首页 > 正文

Python里,一个一定不能忽略的警告

www.sytfyd.com2019-09-21

1警告:

在Pandas中有一个警告,非常有趣,并且频率非常高,它是SettingWithCopyWarning,因为它是一个警告,那么我们可以忽略它。正如标题所说,这是不可能的。而且,这个警告也会引起我们足够的重视。知道为什么出现这个警告并知道如何解决它,也许可以帮助你真正从庞大熊猫的被动用户变为熊猫专家。

2警告是什么?

首先要理解的是,SettingWithCopyWarning是一个警告,而不是错误,Erro。警告的目的是提醒程序员他们的代码可能存在潜在的错误或问题,但这些操作仍然是编程语言中的合法操作。在这种情况下,警告可能表示严重但不容易识别的错误。

SettingWithCopyWarning告诉您操作可能无法按预期工作,您应检查结果以确保没有错误。花点时间了解为什么在采取下一步之前得到此警告。

3个重要概念

要了解SettingWithCopyWarning,首先需要了解Pandas中的某些操作可以返回数据视图,而某些操作将返回数据的副本(Copy)。

视图是原始数据的一部分,副本是新生成的数据,并且没有角钱关系。

赋值 - 设置某些变量值的操作,例如

Data=pd.read_csv('**。csv')

Access - 返回某些值的操作,例如以下索引和链式索引示例

索引 - 引用数据子集的任何赋值或访问方法,例如数据[1: 5]

链接 - 连续使用多个索引操作,例如数据[1: 5] [1: 3]

4链分配

链分配是链式索引和赋值的组合。创建一组数据并让它出现此警告

如您所见,我们可以轻松调出此警告,并且我们可以看到链分配的基本操作。首先,df [df ['name']]返回一个副本,即重新生成一个对象。然后,对于满足条件的行,分配列分数,当然,它与原始数据无关。

5配置警告

Pandas的mode.chained_assignment选项可以采用以下值之一:

'raise' - 抛出异常而不是警告

'警告' - 生成警告(默认)

无 - 完全关闭警告

例如,如果要关闭警告:

因为这不会给我们任何警告,除非你完全理解你在做什么,否则不建议这样做。如果您对要实现的操作有任何疑问,建议不要使用关机警告。一些开发人员重视SettingWithCopy,甚至选择将其提升为异常,这可以避免某些意外行为。

6追踪历史

您可能想知道为什么它如此混乱,为什么不明确指定索引方法是返回视图还是复制以完全避免SettingWithCopy问题。要理解这一点,我们必须研究熊猫的过去。

Pandas确定返回视图或副本的逻辑是由于它使用了NumPy库,这是Pandas库的基础。该视图实际上通过NumPy进入熊猫的词库。实际上,视图在NumPy中很有用,因为它们可以预测地返回。由于NumPy阵列属于单一类型,因此Pandas尝试使用最合适的dtype来最小化内存处理要求。因此,包含单个dtype的DataFrame切片可以作为单个NumPy数组的视图返回,这是处理它的有效方法。但是,多种类型的切片不能以相同的方式存储在NumPy中。 Pandas负责多种索引功能,并保持有效使用其NumPy内核的能力。

最后,Pandas中的索引被设计为有用且通用,并且它们的核心未与底层NumPy阵列的功能完全集成。随着时间的推移,这些设计和功能元素之间的交互会导致一组复杂的规则,这些规则决定了是返回视图还是复制。经验丰富的Pandas开发人员通常对Pandas的实践感到满意,因为他们可以轻松浏览他们的索引行为。

7摘要

不幸的是,对于Pandas新手来说,链式索引几乎是不可避免的,因为get操作返回一个可索引的Pandas对象。此外,用Pandas的核心开发人员之一Jeff Reback的话来说,“从语言学的角度来看,直接检测链式索引是不可能的,必须推断才能理解。”幸运的是,解决警告只需要识别链分配并修复它。如果您只知道整篇文章中的一件事,那么应该是这样。

热门浏览
热门排行榜
热门标签
日期归档