2016-04-19 15 views
0

これは本当にばかな問題かもしれませんが、私はしばらくそれに固執しています。なぜ私はこの条件付きで同じ答えを得続けますか?python pandas

はここでCSV

DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOLUME 
02/03/1997,09:30:00,3045.00,3045.00,3045.00,3045.00,28 
02/04/1997,09:30:00,3077.00,3078.00,3077.00,3077.50,280 
02/05/1997,09:30:00,3094.00,3094.50,3094.00,3094.00,50 
02/06/1997,09:30:00,3106.00,3107.50,3106.00,3107.50,53 
02/07/1997,09:30:00,3144.00,3144.00,3143.50,3143.50,15 
02/06/1997,16:20:00,3126.50,3126.50,3126.00,3126.00,24   
02/06/1997,16:21:00,3126.50,3128.00,3126.50,3128.00,169   
02/06/1997,16:22:00,3128.00,3128.00,3126.00,3126.00,243   
02/06/1997,16:23:00,3125.50,3126.50,3125.50,3125.50,26   

私は、元は本当に長いです元の原因から作られた。これは単なる例です。私はすべての "09:30:00"を簡単にするために上に移動しました。

しかし、ここに私のコードです。

df = pd.read_csv('example.txt', parse_dates = [["DATE", "TIME"]], index_col=0) 

b930 = df.HIGH.at_time("09:30:00") 

a=0 
if 'b930 < 3044.00': 
    a = 7 
else: 
    a = 10 

print a 

この方法で実行すると、私はおそらくそうではないはずの7が得られます。私はこのようにそれを実行する場合

a=0 
if 'b930 > 3044.00': 
    a = 7 
else: 
    a = 10 

print a 

は、と私は良いです7得ます。

私は正直なところ、他のものを試しましたが、私はそれらを消去します。

答えて

2

あなたはシリーズで動作しますので、あなたがallanyを使用する必要があります:

b930 = df.HIGH.at_time("09:30:00") 
print b930 
DATE_TIME 
1997-02-03 09:30:00 3045.0 
1997-02-04 09:30:00 3078.0 
1997-02-05 09:30:00 3094.5 
1997-02-06 09:30:00 3107.5 
1997-02-07 09:30:00 3144.0 

#ValueError: The truth value of a Series is ambiguous. 
# Use a.empty, a.bool(), a.item(), a.any() or a.all(). 
if b930 < 3044.00: 
    a = 7 
else: 
    a = 10 
print a 

allの値はTrueです:

print b930 < 3046.00 
DATE_TIME 
1997-02-03 09:30:00  True 
1997-02-04 09:30:00 False 
1997-02-05 09:30:00 False 
1997-02-06 09:30:00 False 
1997-02-07 09:30:00 False 
Name: HIGH, dtype: bool 

a=0 
if (b930 < 3046.00).all(): 
    a = 7 
else: 
    a = 10 
print a 
10 

チェックanyかの値がTrueです:

if (b930 < 3046.00).any(): 
    a = 7 
else: 
    a = 10 
print a 
7 

もう一つの例:

print b930 > 3044.00 
DATE_TIME 
1997-02-03 09:30:00 True 
1997-02-04 09:30:00 True 
1997-02-05 09:30:00 True 
1997-02-06 09:30:00 True 
1997-02-07 09:30:00 True 
Name: HIGH, dtype: bool 
a=0 
if (b930 > 3044.00).all(): 
    a = 7 
else: 
    a = 10 
print a 
7 

if (b930 > 3044.00).any(): 
    a = 7 
else: 
    a = 10 
print a 
7 
1

これが空の文字列であり、常にTrueにキャストされます。

'b930 < 3044.00' 

に変更し、それを:

b930 < 3044.00 
関連する問題