2016-08-10 172 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

相關問題