与熊猫中的布尔相比,我是否必须偏离PEP 8样式约定?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与熊猫中的布尔相比,我是否必须偏离PEP 8样式约定?相关的知识,希望对你有一定的参考价值。
在根据条件更改数据框列时,我习惯了以下情况(在这种情况下,每位女性的工资为200)。
import pandas as pd
df = pd.DataFrame([[False,100],[True,100],[True,100]],columns=['female','wage'])
df.loc[df['female'] == True,'wage'] = 200
PEP 8 Style常规检查器(在Spyder中)建议在第3行:
与True的比较应为'如果cond为True:'或'if cond:'
将最后一行更改为
df.loc[df['female'] is True,'wage'] = 200
产量
KeyError:'不能使用单个bool索引到setitem'
因为现在语句被评估为单个布尔值而不是系列。
这是一个必须偏离样式约定的情况吗?
您应该使用df['female']
而不进行比较,而不是将True
与任何运算符进行比较。 df['female']
已经是你需要的面具。
与True
比较==
几乎总是一个坏主意,即使在NumPy或Pandas。
做就是了
df.loc[df['female'], 'wage'] = 200
实际上,df['female']
作为布尔系列具有与通过评估df['female'] == True
返回的布尔系列完全相同的值,df['female'] is True
也是布尔系列。 (A系列是Pandas术语,就像数据框中的单个列一样)。
顺便说一句,最后一句话正是为什么is
永远不会工作的原因。在Python中,None
运算符保留用于对象标识,而不是用于比较相等的值。 df ['female']将永远是一个系列(如果df是一个Pandas数据帧),一个系列将永远不会与单个系列相同(对象)
要理解这一点,请更好地考虑英语中“等于”和“相同”之间的差异。在德语中,这是'selbe'(身份)和'gleiche'(平等)之间的区别。在其他语言中,这种区别并不明确。
因此,在Python中,您可以将(引用)对象(特殊对象)if obj is None : ...
与:if a is b
进行比较,甚至可以检查两个变量(Python术语中的“名称”)是否与a == b
指向完全相同的对象。但这种条件控制是一个更强大的断言,而不仅仅是比较平等a == b
。事实上,评估表达式a
的结果可能是任何东西,而不仅仅是一个布尔值。这完全取决于a == b
所属的类,即它的类型。在你的上下文中,a
实际上产生一个布尔系列,前提是b
和a
也是一个Pandas系列。
顺便说一句,如果你想检查两个系列b
和(a == b).all()
之间的所有值是否一致,那么你应该评估a[i] == b[i]
,它将整个系列减少到一个布尔值,当且仅当i
为qazxswpoi的每个值时才为真。
以上是关于与熊猫中的布尔相比,我是否必须偏离PEP 8样式约定?的主要内容,如果未能解决你的问题,请参考以下文章