データフレームの行名を設定するメソッドをまとめました。
データフレームに空白の行を挿入するコードは以下のようになります。set_index、reindex、reset_indexメソッドを駆使します。このコードによりどの分類が欠けていても処理後にAからEの全分類が明示されるようになります。
なおreindexメソッドでaxis=1にすると列名に対応します。
df2のNaNを0に置き換えないとうまくいかず、泥臭い実務的なコードになりました。この処理をしないとdf4で分類Cの行が消えてしまいます。df2からdf3は何も変わっていないように見えますが、分類Cの行に実体が入っているためreset_index処理で消えることはありません。
import pandas as pd
df = pd.read_excel('test.xlsx',sheet_name=0)
print(f"df:\n{df}\n")
df.set_index('分類',inplace=True)
print(f"dfインデックス設定後:\n{df}\n")
labels = ['A','B','C','D','E']
df2 = df.reindex(labels, axis=0)
print(f"df2:\n{df2}\n")
# 空データの分類Cを残すための処理
df3 = df2.replace({'NaN':0})
print(f"df3:\n{df3}\n")
df4 = df3.reset_index()
print(f"df4:\n{df4}\n")
--------------------------------------------------
出力
--------------------------------------------------
df:
分類 評価額 取得額 損益
0 A 110 100 10
1 B 150 100 50
2 D 200 100 100
3 E 120 100 20
dfインデックス設定後:
評価額 取得額 損益
分類
A 110 100 10
B 150 100 50
D 200 100 100
E 120 100 20
df2:
評価額 取得額 損益
分類
A 110.0 100.0 10.0
B 150.0 100.0 50.0
C NaN NaN NaN
D 200.0 100.0 100.0
E 120.0 100.0 20.0
df3:
評価額 取得額 損益
分類
A 110.0 100.0 10.0
B 150.0 100.0 50.0
C NaN NaN NaN
D 200.0 100.0 100.0
E 120.0 100.0 20.0
df4:
分類 評価額 取得額 損益
0 A 110.0 100.0 10.0
1 B 150.0 100.0 50.0
2 C NaN NaN NaN
3 D 200.0 100.0 100.0
4 E 120.0 100.0 20.0