前提・実現したいこと
DBや別のexcelファイルから取り込んだテーブルデータを、前処理やクロス集計などを行った後にExcelに出力してグラフ化したいです。
発生している問題・エラーメッセージ
上記のようなことをやろうとした際、pd.pivot_tableを行った際に、
そのままopenpyxlを使ってexcelに結果を張り付けると、
下図のように、列名とデータの間に、1行空行ができてしまいます。
これをopenpyxlでグラフ化をしてしまうと、結果がずれてしまいます。
excelに張り付けた後にopenpyxl側で調整すれば、ずれることなく
グラフが出せるのだと思いますが、自分が書くとif文がいっぱい入ってしまい、
汎用的でなくなるので、できればシンプルに実現したいです。
該当のソースコード
以下に、現象のソースコードを記載します。
(試行錯誤したバージョンは、ソースがとても汚くなってしまったので、
問題が起こる、一部のソースコードを張ります。試し用に
jupyterで書き散らして行っているので、マジックナンバーがいっぱい
残っていてすみません。。リファクタリングはこれから行う予定です。)
Python3
1book = opx.load_workbook(template_file) 2sheet = book.worksheets[0] 3 4pivot = pd.pivot_table(df_in_dr_list, index="原因区分", columns="フェーズ", values="No.", aggfunc='count',fill_value=0) 5 6 7# dataframeをシートに書き込み 8rows = dataframe_to_rows(pivot, index=True, header=True) 9 10# ワークシートへデータを書き込む 11row_start_idx = 11 12col_start_idx = 2 13for row_no, row in enumerate(rows, row_start_idx): 14 for col_no, value in enumerate(row, col_start_idx): 15 sheet.cell(row=row_no, column=col_no, value=value) # 1セル 16 17# 積み上げ棒グラフを作成 18chart1 = BarChart() 19chart1.type = "col" 20chart1.style = 10 21chart1.grouping = "stacked" 22chart1.overlap = 100 23chart1.title = "Chart Title" 24#chart1.y_axis.title = 'y-axis' 25#chart1.x_axis.title = 'x-axis' 26 27data = Reference(sheet, min_col=3, min_row=11, max_col=6, max_row=15) 28cats = Reference(sheet, min_col=2, min_row=13, max_row=15) 29# chart1.add_data(data, from_rows=True, titles_from_data=True) 30chart1.add_data(data, titles_from_data=True) 31chart1.set_categories(cats) 32chart1.shape = 4 33sheet.add_chart(chart1, "H11") 34 35# 保存 36book.save(report_out_file) 37
試したこと
pandas側のオプションをチェックしてみた。
openpyxlの出力後のデータを試行錯誤で変更してみた。
補足情報(FW/ツールのバージョンなど)
python 3.7.4
openpyxl 3.0.3
pandas 1.0.1
あなたの回答
tips
プレビュー