2016-08-10 177 views
2
import pandas as pd 
import numpy as np 
data = 'filename.csv' 
df = pd.DataFrame(data) 
df 

     one  two  three four five 
a 0.469112 -0.282863 -1.509059 bar True 
b 0.932424 1.224234 7.823421 bar False 
c -1.135632 1.212112 -0.173215 bar False 
d 0.232424 2.342112 0.982342 unbar True 
e 0.119209 -1.044236 -0.861849 bar True 
f -2.104569 -0.494929 1.071804 bar False 

我想选择某个列的范围,比如说列two。我想选择-0.5和+0.5之间的所有值。如何做到这一点?如何在熊猫数据框列中选择一系列值?

我预计使用

-0.5 < df["two"] < 0.5 

但是这(自然)给出了一个ValueError:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

我试图

-0.5 (< df["two"] < 0.5) 

但这输出所有True

正确的输出应该是

0 True 
1 False 
2 False 
3 False 
4 False 
5 True 

什么是找到一个大熊猫数据帧列中的数值范围的正确方法是什么?

编辑:问题

使用.between()

df['two'].between(-0.5, 0.5, inclusive=False) 

将会是什么样

-0.5 =< df['two'] < 0.5 
-0.5 < df['two'] < 0.5 

和不平等之间的区别?

+1

有一个更好的选择:'df.query(' - 0.5 <= two <0.5')' – MaxU

+0

@MaxU感谢您的支持!我没有想到这一点。这非常干净 – ShanZhengYang

回答

8

使用betweeninclusive=False严格不等式:

df['two'].between(-0.5, 0.5, inclusive=False) 

inclusive参数确定所述端点包括或不(True<=False<)。这适用于两种迹象。如果你想混的不平等,你需要给他们明确的代码:

(df['two'] >= -0.5) & (df['two'] < 0.5) 
+0

对于严格的不等式,使用'inclusive = False'意味着什么?我不确定我是否理解'inclusive = True'和'inclusive = False'之间的区别? – ShanZhengYang

+0

使用'(-0.5,0.5)'之间,'-0.5 <值<0.5'和'-0.5 = <值<0.5'之间的区别是什么? – ShanZhengYang

2

.between是一个很好的解决方案,但如果你想更好的控制使用这样的:

(0.5 <= df['two']) & (df['two'] < 0.5) 

运营商&不同于and。其他运营商为|or,~not。有关更多信息,请参阅this discussion

你的声明是一样的:

(0.5 <= df['two']) and (df['two'] < 0.5) 

因此,它引发的错误。

+1

感谢您解释为什么'ValueError'引发了! – ShanZhengYang

相关问题