質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

936閲覧

numpyデータの比較

nini43

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/11/23 03:26

編集2018/11/23 04:53

pythonでnumpyのデータとintデータの比較をしたいのですが、うまくいきません
どのようにすればよいでしょうか?
データは次のとおりです

python

1print(width) 2print(splet)

python

1499 0.00357 2Name: close, dtype: float64 30.012999999999991019

このデータをif文で処理したいのですが

python

1if width > splet: 2 print("buy") 3elif (-splet > width) & (width > splet): 4 print('sell') 5else: 6 print('none')

次のようなエラーが出ます

python

1ValueError Traceback (most recent call last) 2<ipython-input-26-69476cce1849> in <module>() 3 4 4 5 5----> 6 if width > splet: 6 7 print("buy") 7 8 elif (-splet > width) & (width > splet): 8 9~\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self) 10 1119 raise ValueError("The truth value of a {0} is ambiguous. " 11 1120 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." 12-> 1121 .format(self.__class__.__name__)) 13 1122 14 1123 __bool__ = __nonzero__ 15 16ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2018/11/23 04:07

エラーの完全なTracebackを提示ください。
hayataka2049

2018/11/23 05:25

numpy配列ではなくpandasのオブジェクトですね
guest

回答3

0

見た感じ、widthが長さ1のpandas.Seriesオブジェクトですね。

これでできませんか。

python

1if width[0] > splet: 2 print("buy") 3elif (-splet > width[0]) and (width[0] > splet): 4 print('sell') 5else: 6 print('none')

これが処理の意図と合っているかどうかは質問者様の方で判断してください。また、これで意図通りだとしても、「長さ1のSeries」を作成するよりは素直に予め値を取り出しておいた方が冴えたやり方かなぁ・・・と思います。

投稿2018/11/23 05:28

編集2018/11/23 05:41
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2018/11/23 05:34

なるほど。499はインデックスのようですね。自分の回答にモヤモヤしてましたが納得です。
guest

0

ベストアンサー

エラーの意味は、[4990.00357]という要素は1個だが複数float値の扱いとなるデータと0.013という単一の値を比較しているため、どのように真偽を判定してよいか分からないということです。
すべてが真と判定するには.all()、いずれか真と判定するには.any()のいずれかを指定する必要があります。

Python

1import pandas as pd 2df = pd.DataFrame({'close':[0.00357]}) 3width = df['close'] 4splet = 0.013 5 6print(width) 7""" 80 0.00357 9Name: close, dtype: float64 10""" 11print(splet) # 0.013 12 13print(width > splet) 14""" 150 False 16Name: close, dtype: bool 17""" 18 19print((width > splet).all()) #False 20print((width > splet).any()) #False

投稿2018/11/23 05:20

編集2018/11/23 05:45
can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

python

1(-splet > width) and (width > splet)

python

1(-splet > width) & (width > splet)

とすればよいかと思います。

投稿2018/11/23 04:19

編集2018/11/23 04:19
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nini43

2018/11/23 04:54

tiitoiさん回答ありがとうございます and を&に変更しても変わりませんでした
tiitoi

2018/11/23 05:11 編集

質問欄も編集して、width や splet の変数を作成するところも追記いただけますか。変数にどのような値が入っているかが重要なので。 ちなみに splet または width のどちらかが配列なら、np.all((-splet > width) & (width > splet)) とする必要があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問