2017-04-14 9 views
1

浮動小数点数の最初のインスタンスを見つけて '私たちは利益を上げました'と返す関数があります。下のケースでは、私はWAPコラムから8.49を探して探しています。 profit_Priceにおけるxの : はTypeError: 'numpy.float64' オブジェクトは、8.49が近づいている間にこれを停止すべきForループを使用してdataFrameでfloatを見つけよう

profit_Price = round((Wap_price * 0.020) + Wap_price,2) 

def profit_stop(x): 

    for x in profit_Price: 
     if x == 8.49: 
      print('we hit profit') 
    else: 
     return x 

#calls the above function 'profit_stop' 
df['WAP'].apply(profit_stop) 
+0

あなたは何をしようとしているのか分かりません。 'apply'は各要素で与えられた関数を別々に実行します。つまり、' df ['WAP'] 'の各数値' num'に対して 'profit_stop(num)'を実行します。途中で適用を停止する方法はありません(例外Exceptionを除く) – tmrlvi

+0

データフレーム内のWAPカラムに論理テストを適用する方法を教えてください。列からリストを作成し、それを反復処理する必要がありますか? –

+1

'pandas.Series'上の論理演算は、要素単位の操作です。 'df ['WAP'] == 8.49'を試して、何が起こるか見てみましょう。それでは、 '' df ['WAP'] == 8.49] ' – tmrlvi

答えて

2

あなたの目的が比較である場合、あなたは(あなたのDataFrameが本当に巨大でない限り)停止する心配はありません。 pandasnumpyの比較に依存しています。これは本当に効率的で、Python forループより速く実行されます。

df['WAP'] == 8.49又はnp.close(df['WAP'], 8.49)を実行すると、seriesの各要素に対してブールアレイ(True/False)を返します。あなたは、希望の値を得るためにあなたのseriesをフィルタリングするためにそれを使用することができます:

df[np.close(df['WAP'], 8.49)] 

これはあなたのWAPは8.49であるところの行のみが含まれているDataFrameを返します。

0
wap = df['WAP'] 
wap = [float(x) for x in wap] # lets make sure type is correct 


for x in wap: 
    while x < 8.49: 
     print(x) 
     break 
    else: 
     print('we hit it') 
     break 

反復可能ではない私は、エラーメッセージが表示されます。

関連する問題