この記事ではDataFrameにおいてindexとcolumnの番号リセットをする方法を紹介します。
indexやcolumnの一部変更、全て変更、列内容をindexにする方法は以下の記事で紹介しています。

この記事の目標
・index番号リセット
・column番号リセット
DataFrameとSeries型の違いがわからない人はまず以下の記事で理解しましょう!!
「DataFrameとSeriesの違いを紹介」
その他Pythonの記事は以下にまとめています!!
「Python記事まとめ」
[スポンサーリンク]
index番号をリセットする
この項目ではindex番号をリセットする方法を紹介します。
以下のような行番号がでたらめなDataFrameがあったとしましょう。
DataFrameでindexを指定しないとデフォルトで0,1,2…とindexが振られますよね。
今回は無理やりでたらめにしてますが、一部の行を削除したり補完したりするとindex番号が欠けたりバラバラになったりします。
import pandas as pd
df=pd.DataFrame([["A",2,3],["B",5,6],["C",8,9]],index=[2,1,3])
#print表示
# 0 1 2
#2 A 2 3
#1 B 5 6
#3 C 8 9
このようにindexがバラバラになって、デフォルトの0,1,2…のindexにしたい!という時に使うのがreset_indexメソッドです。
reset_index(drop=False, lebel=None, inplace=False, col_level=0, col_fill="")
オプション | 初期値 | 説明 |
drop | False | 元々存在しているindexを列に追加するか否かの設定 |
inplace | False | indexをリセットするDataFrameを上書きするか否かの設定 |
level | None | MultiIndexの時に指定したindexを列に戻す |
col_level | 0 | columnがMultiIndexの時、どの階層に挿入するか指定 |
col_fill | ” “ | columnが多階層の時、カラムが挿入される階層以外の列データのカラムラベルの指定 |
色々オプションがありますが、よく使うのでdropは最低限押さえておきましょう!
ちなみにオプションの中にあるlevel、col_level、col_fillはMultiIndex操作のためのオプションで、今回の趣旨とは違うため紹介しません。
引数無し
まずはシンプルに引数なしでreset_indexを行ってみましょう。
#indexをリセットする
df1=df.reset_index()
#print表示
# index 0 1 2
#0 2 A 2 3
#1 1 B 5 6
#2 3 C 8 9
特に何も設定しないと元々存在しているindexが列にそのまま追加されます。
indexは0,1,2となっており、きちんとリセットされていることが確認できます。
dropオプションを使用
次にdropオプションを使用してみましょう。
これはよく使うので要チェック!!!
dropはindexリセットするときに元々のindexを列に追加するか否かを設定できる引数です。
(Falseで残す、Trueで消す、デフォルトはFalse)
ではTrueにして元のindexを列に追加しないようにしましょう!
#dropを有効にしてindexリセット
df1=df.reset_index(drop=True)
#print表示
# 0 1 2
#0 A 2 3
#1 B 5 6
#2 C 8 9
dropをTrueにすることで元々のindexが列に追加されていないことが確認できます。
おそらく使用する上で元のindexを追加したくない時が多いと思いますので、dropオプションは最低限押さえておきましょう。
inplaceオプションを使用
inplaceオプションは元のDataFrameを上書きするかどうかを設定できるオプションです。
(Trueで上書き、Falseで上書きしない、デフォルトはFalse)
元のindexを残したくないのでdropもTrueにしています。
#dfを上書きする(戻り値無し)
df.reset_index(inplace=True,drop=True)
#print表示
# 0 1 2
#0 A 2 3
#1 B 5 6
#2 C 8 9
戻り値を代入せずともindex番号がリセットされました。
挙動としては以下と同じです。
#これと同じ
df=df.reset_index(drop=True)
set_indexメソッドの時にも話しましたが、上書き設定の時は戻り値がありません(Noneになる)。
#戻り値を受け取る
value=df.reset_index(inplace=True,drop=True)
#valueをprint表示
#None
column番号をリセットする
この項目では列番号をリセットする方法を紹介します。
列番号は何も指定しないとindexと同じく0,1,2…と番号が振られます。
こちらも色々columnをいじると番号がバラバラになります。
その列番号を0,1,2…と振り直す方法を紹介します!
そのためにまずはバラバラの列番号を持つDataFrameを作成
#DataFrame作成
df=pd.DataFrame([["A",2,3],["B",1,6],["C",3,9]],columns=[2,1,3])
#print表示
# 2 1 3
#0 A 2 3
#1 B 1 6
#2 C 3 9
バラバラの列番号をリセットするメソッドは残念ながらありません。
ということでshapeメソッドとrangeを使用して振り直したいと思います。
shapeメソッドはDataFrameの行と列の数を返してくるものです。
それで得た列の数だけrangeで振り直してそれをcolumnsに代入するだけです。
#行と列の数を取り出す
sh=df.shape
#shのprint表示
#(3,3)
#shapeの列の数だけrangeで振り直してcolumnsに代入
df.columns=range(sh[1])
#dfをprint表示
# 0 1 2
#0 A 2 3
#1 B 1 6
#2 C 3 9
列番号が0,1,2と振り直されていることが確認できました。
[スポンサーリンク]
コメント
[…] ・index、columnのリセット、列内容をindexにする方法 ・全てのindexとcolumnの取り出し方 […]
[…] 【Python】PandasのDataFrameでindex、columnの番号リセット、列内容をindexにする方… […]