前提
Pythonでfor文を用いて、ループを行いながら、
計算結果をExcelブックに保存しようとしています。
ループが3つあり、内側のループから順に作成しました。
内側の2つのループを作成した段階までは問題なく動作していました。
しかし、最も外側にある"bt"に関するループを作成したところで、
Excelへの記入が行われなくなってしまいました。
実現したいこと
全ての計算結果を、Excelへ保存することを目指しています。
エラーメッセージが表示されないため、どこを修正すべきかが分からずに困っています。
(問題があるのは、btに関するループ内容だと思われます。)
発生している問題・エラーメッセージ
エラーメッセージはありません。
該当のソースコード
Python
1#インポート 2import pandas as pd 3import scipy.stats as st 4import openpyxl as px 5 6 7#読み込むExcelファイルとシート名を指定 8df = pd.read_excel("読み込みファイルのパス,sheet_name = "シート名") 9 10#必要な列のみ指定 11cs = df.loc[:,["Boat", "Race", 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, "L1", "Rank"]] 12 13###btをループさせたい。 14b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] 15 16for bt in b: 17 # 18 #b値の指定 19 Boat_Type = cs.query("Boat=='@bt'") 20 # 21 ###rnを1-12までループさせたい。 22 r = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 23 # 24 for rn in r: 25 # 26 #レースの指定 27 Race_Num = Boat_Type.query("Race==@rn") 28 # 29 ###ptを0.1-L1までループさせたい。 30 t = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, "L1"] 31 # 32 for pt in t: 33 # 34 #相関を確認するデータ 35 Selection = Race_Num.loc[:,[pt, "Rank"]] 36 # 37 #"-"を含む行を削除 38 Correl = Selection[(Selection[pt] != '-') | (Selection["Rank"] != '-')] 39 # 40 #データフレームを配列に変換 41 Point = list(Correl[pt]) 42 FR = list(Correl["Rank"]) 43 # 44 #スピアマンの順位相関係数を導出 45 cor, pvalue = st.spearmanr(Point, FR) 46 # 47 #相関係数をメモするExcelブックを読み込む 48 wb = px.load_workbook("保存先Excelファイルのパス") 49 ws = wb["correl"] 50 # 51 #書き込みたい行数を取得 52 MaxRow = ws.max_row + 1 53 # 54 #相関係数等を書き込む 55 ws.cell(row = MaxRow, column = 1).value = bt 56 ws.cell(row = MaxRow, column = 2).value = rn 57 ws.cell(row = MaxRow, column = 3).value = pt 58 ws.cell(row = MaxRow, column = 4).value = cor 59 # 60 #excelを上書き保存 61 wb.save("保存先Excelファイルのパス") 62 63#end.
試したこと
rnとptに関するループ文はそのままに、bt部分に変数ではなく値を記入したところ問題なく動作しました。
そのため、問題があるのはbtのループ文であると思われます。
補足情報(FW/ツールのバージョンなど)
AnacondaでPythonを使用しています。
・Anacondaのバージョン:conda 4.12.0
・Pythonのバージョン:Python 3.9.12
・Windowsのバージョン:version 21H2
回答1件
あなたの回答
tips
プレビュー