2024-05-19 22:26:18 发布
网友
我有一个数据帧df
df
Num1 Num2 one 1 0 two 3 2 three 5 4 four 7 6 five 9 8
我想过滤数值大于3(Num1)且小于8(Num2)的行。
我试过这个
df = df[df['Num1'] > 3 and df['Num2'] < 8]
但是错误发生了。
值错误:序列的真值不明确。
所以我用
df = df[df['Num1'] > 3] df = df[df['Num2'] < 8]
我想密码可以短一点。
还有别的办法吗?
您需要添加(),因为运算符优先级与按位运算符&:
()
&
df1 = df[(df['Num1'] > 3) & (df['Num2'] < 8)] print (df1) Num1 Num2 three 5 4 four 7 6
更好的解释是here。
或者如果需要最短的代码,请使用^{}:
df1 = df.query("Num1 > 3 and Num2 < 8") print (df1) Num1 Num2 three 5 4 four 7 6
df1 = df.query("Num1 > 3 & Num2 < 8") print (df1) Num1 Num2 three 5 4 four 7 6
是的,您可以使用&运算符:
df = df[(df['Num1'] > 3) & (df['Num2'] < 8)] # ^ & operator
这是因为and对两个操作数的真值起作用,而&运算符可以在任意数据结构上定义。
and
括号在这里是必需的,因为&绑定的长度小于>和<,所以如果没有括号,Python会将表达式读取为df['Num1'] > (3 & df['Num2']) < 8。
>
<
df['Num1'] > (3 & df['Num2']) < 8
注意,可以将|运算符用作逻辑或。
|
您需要添加
()
,因为运算符优先级与按位运算符&
:更好的解释是here。
或者如果需要最短的代码,请使用^{} :
是的,您可以使用
&
运算符:这是因为
and
对两个操作数的真值起作用,而&
运算符可以在任意数据结构上定义。括号在这里是必需的,因为
&
绑定的长度小于>
和<
,所以如果没有括号,Python会将表达式读取为df['Num1'] > (3 & df['Num2']) < 8
。注意,可以将
|
运算符用作逻辑或。相关问题 更多 >
编程相关推荐