Seu*_*hoi 7 python filter dataframe pandas
我有一个Dataframe df
Num1 Num2
one 1 0
two 3 2
three 5 4
four 7 6
five 9 8
Run Code Online (Sandbox Code Playgroud)
我想过滤Num1中值大于3且Num2中小于8的行.
我试过这个
df = df[df['Num1'] > 3 and df['Num2'] < 8]
Run Code Online (Sandbox Code Playgroud)
但是发生了错误.
ValueError:Series的真值是不明确的.
所以我用过
df = df[df['Num1'] > 3]
df = df[df['Num2'] < 8]
Run Code Online (Sandbox Code Playgroud)
我认为代码可以更短.
还有其他方法吗?
jez*_*ael 14
您需要添加()因为运算符优先级与逐位运算符&:
df1 = df[(df['Num1'] > 3) & (df['Num2'] < 8)]
print (df1)
Num1 Num2
three 5 4
four 7 6
Run Code Online (Sandbox Code Playgroud)
这里有更好的解释.
或者如果需要最短的代码使用query:
df1 = df.query("Num1 > 3 and Num2 < 8")
print (df1)
Num1 Num2
three 5 4
four 7 6
Run Code Online (Sandbox Code Playgroud)
df1 = df.query("Num1 > 3 & Num2 < 8")
print (df1)
Num1 Num2
three 5 4
four 7 6
Run Code Online (Sandbox Code Playgroud)
是的,您可以使用&运算符:
df = df[(df['Num1'] > 3) & (df['Num2'] < 8)]
# ^ & operatorRun Code Online (Sandbox Code Playgroud)
这是因为and可以对两个操作数的真实性值进行运算,而&可以在任意数据结构上定义运算符。
这里的括号是必需的,因为&绑定比>和短<,所以如果没有括号,Python会将表达式读为df['Num1'] > (3 & df['Num2']) < 8。
请注意,您可以将|运算符用作逻辑或。
| 归档时间: |
|
| 查看次数: |
29733 次 |
| 最近记录: |