同じテンプレートのシートが3つある、1つのExcelファイルのデータを、
シート毎にループして、整形したPandasのDataFrame(df)を作り、
3つのdfを結合(merge,concat)したものを、1つのDataFrameとしてExcelファイルに出力したいです。
以下のコードで実現できているのですが、
条件式のシート名があるときdfを作るという、おかしなコードになっており、
本来イメージしていたコードが実現できません。
### こちらが現状のコード wb = openpyxl.load_workbook(file) for ws in wb.worksheets: df = pd.read_excel(file, sheet_name=ws.title, header=#) ~~~ ここにdfを整形する処理 ~~~ # シート名の判定でdfを複数作る if sheet[0] == 'シート00': df00 = df elif sheet[1] == 'シート01': df01 = df if sheet[2] == 'シート02': df02 = df # 3つのDataframeの結合 df_result = pd.concat([df00, df01, df02], axis=0) # Excelファイルに書き出し df_result.to_excel(save_file)
こちらが、イメージ(書きたい)コードのロジックです。
# 空のdfを作る df_result = pd.DataFrame() wb = openpyxl.load_workbook(file) for ws in wb.worksheets: df = pd.read_excel(file, sheet_name=ws.title, header=#) ~~~ ここにdfを整形する処理 ~~~ # ループ毎にdf_resultに整形したdfを追加していくイメージ df_result = pd.merge(df_result, df, how='outer') # Excelファイルに書き出し df_result.to_excel(save_file)
しかし、これをすると、以下のようなエラーが出ます。
MergeError: No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False
そのため、現状は、シート名が分かっているテンプレートなので、
シート名で判別して、そのシート毎にdfを作成して、最後に結合・・・という形にしていますが、
シートの順番が変わったときや、シート名の変更等で対応できないコードになってしまっています。
理想としては、空のDataFrameに3つのDataFrameを順次追加していくようなコードが良いと思っています。
おそらく、pd.merge の部分になにかオプション引数などを設定すればよいのでは?と思っているのですが、
最初からdf_resultのカラム名を設定する方法以外に、方法が見つかってきません。
どなたか、このようなロジックを解決する方法がわかる方いましたら、ご教示頂けますと助かります。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/07 10:01