前提・実現したいこと
複数のcsvファイルに対して同じ処理をしたいのです。今はファイルの数が少ないから同じ処理を何回も書けば良いですが、ファイルの数が増えてくるとそういうわけにもいかないので。
globを使うことで少ないコードでファイルを処理することができると教えていただいたのですが、元々5つのファイルを手直しした後にそのファイルをfor文の中で並行的に処理をしようとしていたのでglobだとそれができなくて困っています。
globを使いつつ#make dataの処理を可能にする方法があるかもしれませんが私にはわかりません。
最終的には5つのファイルのデータを使って新しいデータフレームを作りたいです。その過程で同じ文章を何回も書くのは効率が悪いと思い質問しています。
importから#drop index0までの処理をfor文か何かで回して処理できそうだと考えていますがわかりません。根本的な考え方が間違っているかもしれません。
回答お待ちしております。
追記
自分のコードを見返してみると結局#make dataの部分で何度の同じ文章を書いているのでココの部分を改善しないと意味が無いと思いました。
該当のソースコード
#データを読み込む import pandas as pd nikkei_1 = pd.read_csv('C:/Users/Carnegie93/Documents/nikkeifuturesdata/NSM_200316.csv', encoding="shift-jis") nikkei_2 = pd.read_csv('C:/Users/Carnegie93/Documents/nikkeifuturesdata/NSM_200317.csv', encoding="shift-jis") nikkei_3 = pd.read_csv('C:/Users/Carnegie93/Documents/nikkeifuturesdata/NSM_200318.csv', encoding="shift-jis") nikkei_4 = pd.read_csv('C:/Users/Carnegie93/Documents/nikkeifuturesdata/NSM_200319.csv', encoding="shift-jis") nikkei_5 = pd.read_csv('C:/Users/Carnegie93/Documents/nikkeifuturesdata/NSM_200323.csv', encoding="shift-jis") #抽出 d_nikkei_1 = nikkei_1.iloc[0:23, 50:56] d_nikkei_2 = nikkei_2.iloc[0:23, 50:56] d_nikkei_3 = nikkei_3.iloc[0:23, 50:56] d_nikkei_4 = nikkei_4.iloc[0:23, 50:56] d_nikkei_5 = nikkei_5.iloc[0:23, 50:56] #rename rename_nikkei_1 = d_nikkei_1.rename(columns={'〔60分足〕': '1hour', 'Unnamed: 51': 'open','Unnamed: 52':'high','Unnamed: 53':'low','Unnamed: 54':'close','Unnamed: 55':'dekidaka'}) rename_nikkei_2 = d_nikkei_2.rename(columns={'〔60分足〕': '1hour', 'Unnamed: 51': 'open','Unnamed: 52':'high','Unnamed: 53':'low','Unnamed: 54':'close','Unnamed: 55':'dekidaka'}) rename_nikkei_3 = d_nikkei_3.rename(columns={'〔60分足〕': '1hour', 'Unnamed: 51': 'open','Unnamed: 52':'high','Unnamed: 53':'low','Unnamed: 54':'close','Unnamed: 55':'dekidaka'}) rename_nikkei_4 = d_nikkei_4.rename(columns={'〔60分足〕': '1hour', 'Unnamed: 51': 'open','Unnamed: 52':'high','Unnamed: 53':'low','Unnamed: 54':'close','Unnamed: 55':'dekidaka'}) rename_nikkei_5 = d_nikkei_5.rename(columns={'〔60分足〕': '1hour', 'Unnamed: 51': 'open','Unnamed: 52':'high','Unnamed: 53':'low','Unnamed: 54':'close','Unnamed: 55':'dekidaka'}) #drop index0 Nikkei_1 = rename_nikkei_1.drop(0) Nikkei_2 = rename_nikkei_2.drop(0) Nikkei_3 = rename_nikkei_3.drop(0) Nikkei_4 = rename_nikkei_4.drop(0) Nikkei_5 = rename_nikkei_5.drop(0) #最終結果用のデータフレームを作っておく nikkei_data = pd.DataFrame(index=[], columns=['time','rise_probability','movement_mean']) from statistics import mean #make data for i in range(1,22): rise = 0 #iには数字が入っていて、その数字を行番号としてNikkei_1~5を行と列指定してcandle=close-openして5個の平均値の列を作る for i in range(1,22): rise = 0 Nikkei_1_candle = int(Nikkei_1.iat[i,4]) - int(Nikkei_1.iat[i,1]) if Nikkei_1_candle > 0: rise += 1 Nikkei_2_candle = int(Nikkei_2.iat[i,4]) - int(Nikkei_2.iat[i,1]) if Nikkei_2_candle > 0: rise += 1 Nikkei_3_candle = int(Nikkei_3.iat[i,4]) - int(Nikkei_3.iat[i,1]) if Nikkei_3_candle > 0: rise += 1 Nikkei_4_candle = int(Nikkei_4.iat[i,4]) - int(Nikkei_4.iat[i,1]) if Nikkei_4_candle > 0: rise += 1 Nikkei_5_candle = int(Nikkei_5.iat[i,4]) - int(Nikkei_5.iat[i,1]) if Nikkei_5_candle > 0: rise += 1 rise_probability = rise / 5 heikin = [Nikkei_1_candle,Nikkei_2_candle,Nikkei_3_candle,Nikkei_4_candle,Nikkei_5_candle] nikkei_candle_mean = mean(heikin) time = Nikkei_1.iat[i,0] series = pd.Series([time, rise_probability, nikkei_candle_mean], index=nikkei_data.columns) nikkei_data = nikkei_data.append(series, ignore_index = True)
試したこと
前半の処理はこのようにすると良いと言われましたが、これだと後半の新しいデータフレームを作る処理へのつなげ方がわかりません。
for filepath in glob("C:/Users/Carnegie93/Documents/nikkeifuturesdata/*.csv"): # 各ファイルに対して同じ処理を行う nikkei = pd.read_csv(filepath, encoding="shift-jis") d_nikkei = nikkei.iloc[0:23, 50:56] rename_nikkei = d_nikkei.rename(columns={'〔60分足〕': '1hour', 'Unnamed: 51': 'open','Unnamed: 52':'high','Unnamed: 53':'low','Unnamed: 54':'close','Unnamed: 55':'dekidaka'})
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー