読者です 読者をやめる 読者になる 読者になる

PythonのDataFrameを削除などをした時のインデックス振り直し

pythonのDataFrameオブジェクトで時系列データを処理する時に、インデックスを振り直さなかったが故に少しハマってしまった。

df = df[df.colum_nm condition]
df

上記のように、DataFrameデータの一部をフィルタなどで削除した場合、インデックスが歯抜け状態になってしまうため、その後、例えば

df.ix[ index, column ]

などで要素を取り出そうとした際に、フィルタしたインデックスが見当たらないため、エラーとなってしまう。


このような場合は、reset_index で振り直す必要がある。

df
#----------------
#    X   Y    Z
# 0  A  AA  AAA
# 1  B  BB  BBB
# 2  C  CC  CCC
# 3  D  DD  DDD
# 4  E  EE  EEE
#----------------

df = df[df.Y != 'BB']
df
#----------------
#    X   Y    Z
# 0  A  AA  AAA
# 2  C  CC  CCC
# 3  D  DD  DDD
# 4  E  EE  EEE
#----------------

# => index = 1 が歯抜け状態になっている

# reset_indexでindexを振り直す
df = df.reset_index(drop=True)
df
#----------------
#    X   Y    Z
# 0  A  AA  AAA
# 1  C  CC  CCC
# 2  D  DD  DDD
# 3  E  EE  EEE
#----------------


こうすることで、df.ix[ 1, : ] などで再度指定ができるようになる。

メモまで。

参考

ailaby.com