お世話になります。
https://qiita.com/blog_UKI/items/f782fb86747e0bae89a9
上記ページを参考に勉強をしているのですが…
何度かのエラーをこちらに質問させていただきユーザー様のお陰で進めてこれたのですが…
再度、エラーが発生して進めなくなりました。。。
eps_df = pd.DataFrame(index=monthly_rt.index, columns=monthly_rt.columns) # 月次リターンと同次元のDF作成 roe_df = pd.DataFrame(index=monthly_rt.index, columns=monthly_rt.columns) for i in range(len(eps_df)): # 各行への代入 eps_df.iloc[i] = eps[eps.index > eps_df.index[i]].iloc[-1] for i in range(len(roe_df)): roe_df.iloc[i] = roe[roe.index > roe_df.index[i]].iloc[-1] per_df = closes/eps_df # PERデータフレームの作成 print(per_df) print(roe_df)
上記を実行すると
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-44-31586ce5109b> in <module> 3 4 for i in range(len(eps_df)): # 各行への代入 ----> 5 eps_df.iloc[i] = eps[eps.index > eps_df.index[i]].iloc[-1] 6 7 for i in range(len(roe_df)): ~\anaconda3\lib\site-packages\pandas\core\indexing.py in __getitem__(self, key) 893 894 maybe_callable = com.apply_if_callable(key, self.obj) --> 895 return self._getitem_axis(maybe_callable, axis=axis) 896 897 def _is_scalar_access(self, key: Tuple): ~\anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_axis(self, key, axis) 1499 1500 # validate the location -> 1501 self._validate_integer(key, axis) 1502 1503 return self.obj._ixs(key, axis=axis) ~\anaconda3\lib\site-packages\pandas\core\indexing.py in _validate_integer(self, key, axis) 1442 len_axis = len(self.obj._get_axis(axis)) 1443 if key >= len_axis or key < -len_axis: -> 1444 raise IndexError("single positional indexer is out-of-bounds") 1445 1446 # ------------------------------------------------------------------- IndexError: single positional indexer is out-of-bounds
上記エラーとなります。
ただ、eps_df には途中まで数字が代入されています。
1332.T 1333.T 1414.T 1605.T
Date
2007-09-28 46.449437 109.801567 210.670635 -76.495689
2007-10-31 46.449437 109.801567 210.670635 -76.495689
2007-11-30 46.449437 109.801567 210.670635 -76.495689
2007-12-27 46.449437 109.801567 210.670635 -76.495689
2008-01-31 46.449437 109.801567 210.670635 -76.495689
... ... ... ... ...
2021-05-31 46.449437 109.801567 210.670635 -76.495689
2021-06-30 NaN NaN NaN NaN
2021-07-30 NaN NaN NaN NaN
2021-08-31 NaN NaN NaN NaN
2021-09-03 NaN NaN NaN NaN
169 rows × 4 columns
ちなみに eps は
1332.T 1333.T 1414.T 1605.T
2018-03-31 55.712327 305.992528 NaN 27.641420
2018-06-30 55.712327 305.992528 135.635477 27.641420
2019-03-31 49.428861 317.261536 135.635477 65.817014
2019-06-30 49.428861 317.261536 150.107472 65.817014
2019-12-31 49.428861 317.261536 150.107472 107.557873
2020-03-31 47.465077 238.245455 150.107472 107.557873
2020-06-30 47.465077 238.245455 167.291805 107.557873
2020-12-31 47.465077 238.245455 167.291805 -76.495689
2021-03-31 46.449437 109.801567 167.291805 -76.495689
2021-06-30 46.449437 109.801567 210.670635 -76.495689
になります。
まずエラー元と考えられる
for i in range(len(eps_df)): # 各行への代入 eps_df.iloc[i] = eps[eps.index > eps_df.index[i]].iloc[-1]
は何をしているのでしょうか?for文でループ処理。eps_dfの長さ文(今回は169)の回数処理をしていると思いますが
eps[eps.index > eps_df.index[i]].iloc[-1] は何をしているのでしょうか?
上記のような a[a.index > b.index[i]] の表記方法について調べてみたのですが分かりませんでした。
※文章的には簡単そうなので根本的に探し方を間違っていそうですが…
エラーの原因・対策がわかる方いらっしゃいますでしょうか?
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/05 13:30
2021/09/06 22:07