dataframeの上に日付を入れたエクセル出力の方法
解決したいこと
元データを日付別に分類し、表1のようなdataframeを100個ほど制作後にエクセル出力する、という自動プログラムを組んだところ、
「エクセルに出力する際には表2のようにして欲しい」と依頼があったが、完全な形で実装できていない。
表1 : dataframe(ファイル名はYYYY-MM-DD.xlsxで保管)
Name | Age | item |
---|---|---|
panda | 5 | Ax |
usagi | 11 | Bot |
koara | 45 | Cup |
表2 要求された実装(ファイル名に入れた日付情報を、エクセルファイルの先頭行にも入れてほしい)
YYYY-MM-DD | ||
---|---|---|
Name | Age | item |
panda | 5 | Ax |
usagi | 11 | Bot |
koara | 45 | Cup |
自分で試したこと
- 最下行に入れる
import pandas as pd
#itemを省略した仮データ
df = pd.DataFrame(
data=[{'Name': panda, 'Age': 5,},{'Name': "usagi", 'Age': 11,},{'Name': "koara", 'Age': 45}])
#ファイル名に使う日付情報
hiduke="2020-12-01"
df=df.append(pd.Series(dtype=str),ignore_index=True)
df.iat[-1,0]=hiduke
#空の行を一番下に追加し、iatで最下行先頭列を指定して代入
表3 上記プログラムでの出力結果(エクセルにする際にindex=Falseを使用している)
Name | Age | item |
---|---|---|
panda | 5 | Ax |
usagi | 11 | Bot |
koara | 45 | Cup |
YYYY-MM-DD |
良いアイデアだと思ったのだが「行が多いファイルだと最初に開いた時に日付が見えない」とのことで却下された。
2.マルチインデックスにする
import pandas as pd
df = pd.DataFrame(
data=[{'Name': panda, 'Age': 5,},{'Name': "usagi", 'Age': 11,},{'Name': "koara", 'Age': 45}])
hiduke="2020-12-01"
df.columns=pd.MultiIndex.from_tuples(zip([hiduke,""],df.columns))
#マルチインデックスのでNAME,AGEの上に日付を入れる
表4 上記プログラムでの出力結果
YYYY-MM-DD | ||
---|---|---|
Name | Age | |
0 | panda | 5 |
1 | usagi | 11 |
2 | koara | 45 |
マルチインデックスを使う場合、エクセルに出力する際にIndex=Falseが使えず、1列目に連番が残る。
この連番は不要とのことで却下。
3. openpyxlで全部書き直す
最終手段。エクセルファイルに出力する際にstartrow=1として1行目を開けておき、
出力したファイルをopenpyxlで読み込み直してA1にhidukeを代入する。
間違いなく実現はできるはずのだが、極めて不格好な気がするので未作成。
もっと良い方法があってもいいような・・・。
0