pandasでおよそ5日毎にデータフレームを区切ってcsvを読み込んでいくプログラムを作っているのですが
その際プログラムでif文を使ってデータフレームにデータが有るか否かを判断させているのですが
具体的な説明の無い「keyerror」というエラーが表示されます
python
1import pandas as pd 2 3#読み込んでいく週の変数を生成 4def read(number): 5 variable="df_"+str(number)+"weeks" 6 return variable 7 8 9#csvをその年の1/1から古い日付から順に読み込んでデータフレームに追加していき 10#土曜日曜になったらファイルが存在しないので(exceptが発動)一回区切らせる 11number=1 12for month in range(1,13): 13 if month<10: 14 month="0"+str(month) 15 else: 16 month=str(month) 17 18 for date in range(1,32): 19 if date<10: 20 date="0"+str(date) 21 else: 22 date=str(date) 23 24 day=month+date 25 #try: 26 z=read(number) 27 #関数で作った文字列(変数)にデータがあるかどうか判定 28 #無ければpd.read_csvで読み込ませる。有る場合は追加させる 29 if globals()[z] is None: 30 globals()[z]=pd.read_csv("EURUSD_2007"+day+".csv",encoding="shift-jis") 31 else: 32 globals()[z]=pd.merge(globals()[z], pd.read_csv("EURUSD_2007"+day+".csv",encoding="shift-jis"),how="outer") 33 #except: 34 #number+=1 35 #continue
このコードを実行するとif globals()[z] is None:
この部分で「keyerror df_1weeks」というエラーが出てきます
※最後の方の「try:」部分や「except:」以降の処理はエラーを調べる為に#で実行させないようにしています
if文の何がエラーになっているのでしょうか?
globals()[z] is None
はどういう意図で書いてますか?
初めまして
if globals()[z] is None:
こちらは土曜日曜の日付のCSVのファイルは存在しないのでその場合except内の処理が実行されて
numberの値が変わる様になっているのですが
numberの値が変わった時今まで入れていたデータフレームの変数名も変わって
変数内にデータが存在しないので、その場合は
globals()[z]=pd.read_csv("EURUSD_2007"+day+".csv",encoding="shift-jis")
この処理を実行させる為です
言い換えれば年の初めの一番最初のcsvがある日付もしくは月曜の日付にあたる日には変数内が空なのでglobals()[z]=pd.read_csv("EURUSD_2007"+day+".csv",encoding="shift-jis")
↑を実行させる為にif globals()[z] is None:を入れました