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

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

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

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

2回答

1667閲覧

Python Dataframeのエラーについて

shinobu_777

総合スコア10

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/01/17 06:49

前提・実現したいこと

apiを使いbitflyerのデータを取得しているのですが
一定時間がたつとエラーがかえってきてしまい、どのように対応したらいいかがわかりません。

発生している問題・エラーメッセージ

If using all scalar values, you must pass an index
whileのループで暫くは動作しているのですが、
5分くらい経つとエラーが発生します。

該当のソースコード

import pandas as pd
from datetime import datetime, timezone, timedelta
import pybitflyer
import time
import requests
import json
public_api = pybitflyer.API()
api = pybitflyer.API(api_key="API", api_secret="API")

while True:
bf_positions = pd.DataFrame(api.getpositions(product_code='FX_BTC_JPY')) #←ここでエラーが発生
local_pos = 'NONE'
local_pos_price = 0
if not(bf_positions.empty):
local_pos = bf_positions.ix[[0], ['side']].values.flatten()
local_pos_price = int(bf_positions.ix[[0], ['price']].values.flatten())

print(local_pos)
time.sleep(1)

補足情報(FW/ツールのバージョンなど)

Windows Server 2016
python3.7
numpy 1.15.4
pandas 0.23.4

※API制限はかかっていませんでした。
※別環境(Mac)では発生しません。

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

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

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

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

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

can110

2019/01/17 07:02

api.getpositions(~)の戻り値はJSONデータだと推測しますが、それを提示ください。
shinobu_777

2019/01/17 07:09

戻り値は以下です。よろしくお願いします。 [{'product_code': 'FX_BTC_JPY', 'side': 'BUY', 'price': 389073.0, 'size': 0.1, 'commission': 0.0, 'swap_point_accumulate': 0.0, 'require_collateral': 259.31689200, 'open_date': '2019-01-17T02:58:48.41', 'leverage': 15.0, 'pnl': 4.3289728, 'sfd': 0.0}]
can110

2019/01/17 07:13

当方環境では1行11列のDataFrameとして構築され、エラーは発生しませんでした。 エラー発生時の戻り値でしょうか?
shinobu_777

2019/01/17 07:21

下記の結果となります。 python test.py bit_test.py:17: DeprecationWarning: .ix is deprecated. Please use .loc for label based indexing or .iloc for positional indexing See the documentation here: http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated local_pos = bf_positions.ix[[0], ['side']].values.flatten() bit_test.py:18: DeprecationWarning: .ix is deprecated. Please use .loc for label based indexing or .iloc for positional indexing See the documentation here: http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated local_pos_price = int(bf_positions.ix[[0], ['price']].values.flatten()) ['BUY'] ['BUY'] ・・・(5分くらい繰り返し) ['BUY'] ['BUY'] Traceback (most recent call last): File "bit_test.py", line 13, in <module> bf_positions = pd.DataFrame(api.getpositions(product_code='FX_BTC_JPY')) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\frame.py", line 348, in __init__ mgr = self._init_dict(data, index, columns, dtype=dtype) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\frame.py", line 459, in _init_dict return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\frame.py", line 7356, in _arrays_to_mgr index = extract_index(arrays) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\frame.py", line 7393, in extract_index raise ValueError('If using all scalar values, you must pass' ValueError: If using all scalar values, you must pass an index
can110

2019/01/17 07:29

えーっと。提示されたものは何でしょうか?エラー発生時のTracebackでしょうかね? まずはapi.getpositions(~)の戻り値が知りたいので res = api.getpositions(~) print(res) bf_positions = pd.DataFrame(res) という感じに修正して、エラー時のresの値を捕捉し提示ください。
shinobu_777

2019/01/17 07:35

resの値は、 [{'product_code': 'FX_BTC_JPY', 'side': 'BUY', 'price': 389073.0, 'size': 0.1, 'commission': 0.0, 'swap_point_accumulate': 0.0, 'require_collateral': 259.31689200, 'open_date': '2019-01-17T02:58:48.41', 'leverage': 15.0, 'pnl': 4.3289728, 'sfd': 0.0}] です。
can110

2019/01/17 07:44 編集

回答しました。 回答コードを実行し、質問者様の環境でのバージョンおよびエラーが発生するかを確認したうえで質問本文に追記ください。
guest

回答2

0

5分くらい経つとエラーが発生します

のであれば 『bitFlyerのAPIからのレスポンスに問題が生じた』可能性が大きいかと思います。(何らかのエラーメッセージが返ってきたなどなど)

とりあえず、現状

Python

1bf_positions = pd.DataFrame(api.getpositions(product_code='FX_BTC_JPY'))

の箇所を

Python

1response = api.getpositions(product_code='FX_BTC_JPY') 2try: 3 bf_positions = pd.DataFrame(response) 4except ValueError: 5 print("ERROR: ", response)

のようにして、エラーが起こった際のレスポンスを確認してみると良いのではないでしょうか

投稿2019/01/17 08:33

magichan

総合スコア15898

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

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

shinobu_777

2019/01/17 08:53

そうですね。APIからの戻り値がおかしいかもしれないので、確認してみます。 ありがとうございます。
guest

0

以下のとおり当方環境では提示データにて正常に動作します。
質問者様の環境でのバージョンおよびエラーが発生するかを確認ください。

Python

1import sys 2print(sys.version) 3import pandas as pd 4print(pd.__version__) 5res = [{'product_code': 'FX_BTC_JPY', 'side': 'BUY', 'price': 389073.0, 'size': 0.1, 'commission': 0.0, 'swap_point_accumulate': 0.0, 'require_collateral': 259.31689200, 'open_date': '2019-01-17T02:58:48.41', 'leverage': 15.0, 'pnl': 4.3289728, 'sfd': 0.0}] 6df = pd.DataFrame(res) 7print(df)
3.5.6 |Anaconda custom (64-bit)| (default, Aug 26 2018, 16:05:27) [MSC v.1900 64 bit (AMD64)] 0.23.4 commission leverage open_date pnl ... sfd side size swap_point_accumulate 0 0.0 15.0 2019-01-17T02:58:48.41 4.328973 ... 0.0 BUY 0.1 0.0 [1 rows x 11 columns]

投稿2019/01/17 07:43

can110

総合スコア38266

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

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

shinobu_777

2019/01/17 08:52

ありがとうございます。確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問