前提・実現したいこと
yahoo_finance_api2を使い、複数銘柄の株価情報を取得しようとしています。
銘柄コード(codes)ごとの営業日(data)や終値(price)のデータを得た後、
for文で銘柄ごとのデータフレームを作っています。
各データフレームを縦に結合し、1つのデータフレームを作った後、それをCSVに出力したいのですが、下記3点で躓いています。
①エラーメッセージが出る
おそらく、code、n_data、priceでデータの型が違うんだと思いますが、
codeの型を変えて格納する一文をどこかに加えれば良いのでしょうか。
②行・列の入れ替えができない
「出力結果(目指している形)」のようにしたいのですが、行列の入れ替えができません。
①のエラーと関係があるんだと思います。
③for文でのデータの結合方法が分からない
他の質問を調べて、pd.concatで出来そうなのは分かりましたが、
この場合どのように記述すれば良いのでしょうか。
発生している問題・エラーメッセージ
エラーメッセージ /opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:30: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
出力結果(現状)
0
0 9983
1 [2021-09-24 06:15:00]
2 [77100.0]
0
0 7203
1 [2021-09-24 06:15:01]
2 [10100.0]
0
0 9020
1 [2021-09-24 06:15:00]
2 [7136.0]
出力結果(目指している形)
0 1 2
0 9983 [2021-09-24 06:15:00] [77100.0]
1 7203 [2021-09-24 06:15:01] [10100.0]
2 9020 [2021-09-24 06:15:00] [7136.0]
該当のソースコード
python
1from datetime import datetime 2import pandas as pd 3import sys 4import numpy as np 5from yahoo_finance_api2 import share 6from yahoo_finance_api2.exceptions import YahooFinanceError 7 8codes = [9983, 7203, 9020] 9S_year = 0 10S_month = 3 11 12def kabuka(): 13 14 result = [] 15 for code in codes: 16 my_share = share.Share(str(code) + ".T") 17 symbol_data = None 18 19 try: 20 symbol_data = my_share.get_historical(share.PERIOD_TYPE_YEAR,S_year,share.FREQUENCY_TYPE_MONTH,S_month) 21 22 except YahooFinanceError as e: 23 print(e.message) 24 sys.exit(1) 25 26 data = symbol_data['timestamp'] 27 price = symbol_data['close'] 28 29 n_data = [datetime.utcfromtimestamp(int(data[i]/1000)) for i in range(len(data))] 30 all_data = np.array([code, n_data, price]).T 31 all_data = pd.DataFrame(all_data) 32 33 result.append((all_data)) 34 35 return result 36 37result = kabuka() 38 39for i in result: 40 print(i) 41 42#CSVに結合したデータフレームを出力したい 43#result.to_csv('test1.csv', mode='w', header=True) 44#data = pd.read_csv('test1.csv')
試したこと
NumPy配列ndarrayの行と列を入れ替えるためにT属性(.T)を書き足しても行列が入れ替わりませんでした。(おそらくエラーを解決していないためと思われます。)
補足情報(FW/ツールのバージョンなど)
加工前のデータです。
{'timestamp': [1632464100000], 'open': [77150.0], 'high': [77340.0], 'low': [76530.0], 'close': [77100.0], 'volume': [521000]}
/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:32: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
{'timestamp': [1632464101000], 'open': [9985.0], 'high': [10100.0], 'low': [9973.0], 'close': [10100.0], 'volume': [6981600]}
{'timestamp': [1632464100000], 'open': [7158.0], 'high': [7162.0], 'low': [7088.0], 'close': [7136.0], 'volume': [1808400]}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/25 03:13
2021/09/25 15:23