前提
Python Pandasで時系列データの処理をしています。
データフレームから1つずつデータを抽出して名前短縮してストックするためwhileでループしています。
ループの中で1つ前/2つ前のデータも呼び出しているので、ループ初期(1本目、2本目)では1つ前/2つ前のデータが存在しない状態となります。これをエラーとせずに、exceptを使ってパスしたいのですが、うまくパスできません。
どのようにすれば、exceptを効かせることができるでしょうか?
どうぞよろしくお願いいたします。
やりたいこと
下のコードで i=0のとき [p0, c0] はストックして、 [p1, c1] [p2, c2] パスしたい
i=0のとき
[p0, c0] = ・・・ 処理する
[p1, c1] = ・・・ 存在しないのでexceptでパス
[p2, c2] = ・・・ 存在しないのでexceptでパス
i=1のとき
[p0, c0] = ・・・ 処理する
[p1, c1] = ・・・ 処理する
[p2, c2] = ・・・ 存在しないのでexceptでパス
i=2のとき
[p0, c0] = ・・・ 処理する
[p1, c1] = ・・・ 処理する
[p2, c2] = ・・・ 処理する
※なお、if文を使って、ループ初期の場合分けをすればよいのでしょうが、実際のコードだと場合分けの数が多いため、可能であれば、try - exceptで場合分けをせずに処理できないかと考えています。
エラー
現状のコードだと、except IndexError が効かずに
ValueError: -1 is not in range
となってしまいます。
Python
1import pandas as pd 2df = pd.DataFrame({'price': [350, 450, 500, 650, 700, 850 ], 3 'cond': [False, True, False, False, False, True]}) 4 5i = 0 6while i < len(df): 7 8 # 名前短縮してストック 9 try: 10 [p0, c0] = [df.loc[i,'price'], df.loc[i,'cond']] 11 [p1, c1] = [df.loc[i-1,'price'], df.loc[i-1,'cond']] 12 [p2, c2] = [df.loc[i-2,'price'], df.loc[i-2,'cond']] 13 14 except IndexError as e: 15 print("リストの添字エラー") 16 17 i += 1
回答1件
あなたの回答
tips
プレビュー