pandasの列は、indexとcolumnからなる。これを入れ替えるには、rename_axis().reset_index().set_index()をつかう。
In [1]:
df = pd.DataFrame(index=list('abcde')).assign(iroha=list('イロハニホ'),even=np.arange(5)%2==1)
df
Out[1]:
reset_index()の挙動¶
reset_index() は、今のindexをcolumnに移して、新しい連番のindexをふる。
元々、df.index.nameは空になっている。columnに移るためには名前がつかなくてはいけないので、defaultで'index'という名前がつく。
In [2]:
df.reset_index()
Out[2]:
すでにdfに'indexという名のcolumnがある場合は、'level_0'という名が振られる.
In [3]:
df.assign(index=df.iroha).reset_index()
Out[3]:
'index'も'level_0'もcolumnにある場合は、失敗する.
In [4]:
df.assign(index=df.iroha, level_0='df.iroha').reset_index()
そのため、reset_indexを連続で使っても失敗する
In [5]:
# df.reset_index()
# df.reset_index().reset_index()
# df.reset_index().reset_index().reset_index() -> fail ValueError: cannot insert level_0, already exists
set_indexの挙動¶
set_indexは現在のindexを捨てて、columnから新たなindexを設定する。
In [6]:
df.set_index('iroha')
Out[6]:
元々のindexを温存して、indexとcolumnを入れ替えるには、reset_index().set_indexをつかう
In [7]:
df.reset_index().set_index('iroha')
Out[7]:
indexの名前を変更したい場合は、indexの名前を設定してからおこなう。 df.index.name = 'new_index_name' でもよいが、chain形式でかくにはrename_axisを使う
In [8]:
df.rename_axis('new_index_name').reset_index().set_index('iroha')
Out[8]:
Comments
comments powered by Disqus