【Python】Pandasでindex、columnの番号をリセットする方法

Pandas

この記事ではDataFrameにおいてindexcolumnの番号リセットをする方法を紹介します。

indexやcolumnの一部変更、全て変更、列内容をindexにする方法は以下の記事で紹介しています。

【Python】PandasのDataFrameで行名、列名を変更する方法を紹介(一部変更、全変更、列内容を行名にする方法)
この記事では行名や列名の変更方法を紹介しています。 なお紹介しているのは一部変更、全変更、列内容を行名に変更する方法です。 「行番号、列番号を012…とリセットさせたい」という人はこの記事では無く以下の記事で紹介しています。 ...

 

この記事の目標
・index番号リセット
・column番号リセット

 

DataFrameとSeries型の違いがわからない人はまず以下の記事で理解しましょう!!
DataFrameとSeriesの違いを紹介
その他Pythonの記事は以下にまとめています!!

Python記事まとめ

 

[スポンサーリンク]


index番号をリセットする

この項目ではindex番号をリセットする方法を紹介します。

以下のような行番号がでたらめなDataFrameがあったとしましょう。
DataFrameindexを指定しないとデフォルトで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は最低限押さえておきましょう!
ちなみにオプションの中にあるlevelcol_levelcol_fillMultiIndex操作のためのオプションで、今回の趣旨とは違うため紹介しません。

引数無し

まずはシンプルに引数なしで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オプションを使用してみましょう。
これはよく使うので要チェック!!!
dropindexリセットするときに元々の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

dropTrueにすることで元々のindexが列に追加されていないことが確認できます。
おそらく使用する上で元のindexを追加したくない時が多いと思いますので、dropオプションは最低限押さえておきましょう。

inplaceオプションを使用

inplaceオプションは元のDataFrameを上書きするかどうかを設定できるオプションです。
(Trueで上書き、Falseで上書きしない、デフォルトはFalse)
元のindexを残したくないのでdropTrueにしています。

#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と振り直されていることが確認できました。

[スポンサーリンク]


コメント

  1. […] ・index、columnのリセット、列内容をindexにする方法 ・全てのindexとcolumnの取り出し方 […]

  2. […] 【Python】PandasのDataFrameでindex、columnの番号リセット、列内容をindexにする方… […]

タイトルとURLをコピーしました