前提・実現したいこと
複数のcsvファイルに対して同じ処理をしたいのです。今はファイルの数が少ないから同じ処理を何回も書けば良いですが、ファイルの数が増えてくるとそういうわけにもいかないので。
追記
globを使うことで少ないコードでファイルを処理することができると教えていただいたのですが、元々5つのファイルを手直しした後にそのファイルをfor文の中で並行的に処理をしようとしていたのでglobだとそれができなくて困っています。
globを使いつつ#make dataの処理を可能にする方法があるかもしれませんが私にはわかりません。
最終的には5つのファイルのデータを使って新しいデータフレームを作りたいです。その過程で同じ文章を何回も書くのは効率が悪いと思い質問しています。
importから#drop index0までの処理をfor文か何かで回して処理できそうだと考えていますがわかりません。根本的な考え方が間違っているかもしれません。
回答お待ちしております。
該当のソースコード
#データを読み込む 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)
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。