この記事ではDataFrameのindexを初期化するreset_indexメソッド(pandas.DataFrame.reset_index)についてまとめました。
pandas.DataFrame.reset_indexを使うことで
- ぐちゃぐちゃになった行indexを整列させる
- set_indexで指定したindexを初期化する
などのことが行なえます。
reset_indexメソッドの使い方
このセクションでは、reset_indexメソッドの基本的な使い方を紹介します。
まずは必要なライブラリをimportして、サンプルとして使うDataFrameを作成しておきます。
# ライブラリのimport
import pandas as pd
import numpy as np
# サンプルデータの作成
name = ["taro","jiro","saburo","shiro"]
feature = ["height","weight","blood type","age"]
data = np.array([
[190,180,170,160],
[100,90,80,70],
["A","B","AB","O"],
[30,28,26,24]
]).T
# DataFrame化
df = pd.DataFrame(data,
columns=feature)
df=df.sample(frac=1)
# 確認
df
reset_indexメソッドでindexを振り直す
DataFrameのreset_indexメソッドを使えば、DataFrameの行のindexを簡単に振り直すことができます。
例えば、サンプルとして作ったDataFrame dfのindexは0,3,1,2の順に並んでいます。
これをreset_indexすることで先頭の行から順に0,1,2,3のようにindexを振り直すことができます。
df2 = df.reset_index() # 元のindexはindexというカラムに保存される
df2
このとき、reset_indexの引数に何も指定しなければ、index列が作られて、オリジナルのDataFrameについていたindexが保存されます。
drop=Trueでindex列を作らない
reset_indexメソッドにはdrop引数があります。
この値は「オリジナルのindexを列として保存しておくならFalse、保存しないならTrue」にします。
デフォルトではFalseになっているので、もしもindex列が不要ならばTrueにしましょう。
df3 = df.reset_index(
drop=True # オリジナルのindexを列として保存しない
)
df3
inplace=TrueでDataFrameを直接変更
reset_indexメソッドにはinplace引数があります。
この値は「reset_indexを実行したオブジェクト自体を変更する場合はTrue、変更しないのならFalse」にします。
デフォルトではFalseになっているので、メソッドの出力として新しいDataFrameが返ってきますがオリジナルのDataFrameは変更されていません。
もしもオリジナルのDataFrameオブジェクト自体を変更していいのなら、inplace=Trueとしましょう。
df.reset_index(
drop=True,
inplace=True
)
df
[発展]set_indexでデフォルトのindex以外のものを使っていた場合
set_indexメソッドを使うと、DataFrameの行indexに適当な列の値を使うことができました。
set_indexについては以下で解説しています。
例えばset_indexでage列をindexに指定します。
df4 = df.set_index("age") # インデックスにしたい列名
df4
set_indexを使ったDataFrameに対し、reset_indexを行うと、以下のように0スタートのindexが振り直されます。
つまりreset_indexをつかうことで、元のDataFrameの形に直すことができます。
df4.reset_index()
まとめ
この記事ではDataFrameの行indexを初期化するメソッド「reset_index」を紹介しました。
複数のDataFrameを結合した場合や、行を削除した場合などにreset_indexを使う場合が多いかと思います。
元のindexを残しておくかどうかは問題によって変わります。注意しましょう。