Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当我与《熊猫》中的布尔人相比时,我是否必须偏离PEP 8风格的惯例?_Python_Pandas_Pep8 - Fatal编程技术网

Python 当我与《熊猫》中的布尔人相比时,我是否必须偏离PEP 8风格的惯例?

Python 当我与《熊猫》中的布尔人相比时,我是否必须偏离PEP 8风格的惯例?,python,pandas,pep8,Python,Pandas,Pep8,在根据条件修改数据帧列时(在本例中,每个女性的工资为200),我习惯于使用以下方法 PEP 8样式约定检查器(在Spyder中)在第3行中建议: 与True的比较应为“if cond is True:”或“if cond:” 将最后一行更改为 df.loc[df['female'] is True,'wage'] = 200 屈服 KeyError:“无法使用单个布尔索引到集合项” 因为现在语句的计算结果是单个布尔值,而不是序列 在这种情况下,是否必须偏离造型惯例 您应该在不进行比较的情况下使

在根据条件修改数据帧列时(在本例中,每个女性的工资为200),我习惯于使用以下方法

PEP 8样式约定检查器(在Spyder中)在第3行中建议:

与True的比较应为“if cond is True:”或“if cond:”

将最后一行更改为

df.loc[df['female'] is True,'wage'] = 200
屈服

KeyError:“无法使用单个布尔索引到集合项”

因为现在语句的计算结果是单个布尔值,而不是序列


在这种情况下,是否必须偏离造型惯例

您应该在不进行比较的情况下使用
df['female']
,而不是与任何运算符进行
True
比较
df['female']
已经是您需要的掩码

==
来比较
True
几乎总是一个坏主意,即使是在小动物或熊猫身上。

就这么做吧

df.loc[df['female'], 'wage'] = 200 
实际上,
df['female']
作为一个布尔级数,其值与通过计算
df['female']==True返回的布尔级数值完全相同,后者也是一个布尔级数。(系列是一个术语,类似于数据帧中的单个列)

顺便说一下,最后一句话正是为什么
df['female']是真的
永远不会起作用。在Python中,
is
操作符保留用于对象标识,not用于比较相等值。df['female']将始终是一个系列(如果df是一个数据帧),并且一个系列将永远不会与单个数据帧相同(对象)

为了更好地理解这一点,请思考英语中“equal”和“same”之间的区别。在德语中,这就是“selbe”(身份)和“gleiche”(平等)之间的区别。在其他语言中,这种区别并不那么明显

因此,在Python中,您可以将(对一个)对象的引用与(特殊对象)
None
与:
进行比较,如果obj为None:…
,甚至可以检查两个变量(“Python术语中的名称”)是否指向与
完全相同的对象,如果a为b
。但是这个条件保持是一个比仅仅比较等式a==b强得多的断言。事实上,计算表达式
a==b
的结果可能是任何东西,而不仅仅是一个布尔值。这完全取决于
a
所属的类,即其类型。在您的上下文中,如果
a
b
也是一个布尔序列,那么
a==b
实际上会生成一个布尔序列


顺便说一下,如果您想检查两个系列
a
b
之间的所有值是否一致,那么您应该计算
(a==b)。all()
将整个系列减少为单个布尔值,当且仅当
a[i]==b[i]时,该值才为真
对于
i

的每一个值,如果它不起作用,则为是。可能会对你有帮助。如果你做了
df.loc[(df['female']是真的),'wage']
,会发生什么?我不知道
的关联性规则是
,所以它可能被解释为
df.loc[df['female']是(True,'wage')]
,我不认为这是你的意思。这会产生相同的关键错误。我不想添加新的答案,但我认为这应该包括提到
1==True#True
vs
1是True#False
OK,我偶尔也会这样做。但是如果我需要检查一个条件是否为假呢
~df['female']
?@E.Sommer:是的,使用
~
。如果
df['female']
也有非
bool
值,例如字符串,该怎么办?不检查
==True
也会选择那些行。@MichaelLitvin:在这种情况下,首先,您在那里有一个非常奇怪的列,其次,
==True
也会选择任何值为
1
1.0
的行,或者任何其他与
True
比较的行。在这种情况下,您可能需要类似于
df['female'].apply(lambda x:x为True)
的内容,或者如果您希望允许
numpy.bool
或其他类似bool的类型的实例,则需要更奇怪的内容。
df.loc[df['female'], 'wage'] = 200