[Python] 320 pandasの行名設定 index関連メソッド

データフレームの行名を設定するメソッドをまとめました。

データフレームに空白の行を挿入するコードは以下のようになります。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