数据框通过列值筛选行

2024-05-19 22:26:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧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]

我想密码可以短一点。

还有别的办法吗?


Tags: and数据密码df错误序列one数值
2条回答

您需要添加(),因为运算符优先级与按位运算符&

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对两个操作数的真值起作用,而&运算符可以在任意数据结构上定义。

括号在这里是必需的,因为&绑定的长度小于><,所以如果没有括号,Python会将表达式读取为df['Num1'] > (3 & df['Num2']) < 8

注意,可以将|运算符用作逻辑或。

相关问题 更多 >