【Python】PandasでDataFrameを編集、for文のエラー

プログラム

Pandasでfor文を回すときに、DataFrameの一部をdropなどで
変更していると回らないことがあったので実際に試します。

まずはライブラリをimportします。

import pandas as pd
import numpy as np

まずは3行2列のDataFrameを作成します。

df_1 = pd.DataFrame(np.arange(6).reshape(3, 2),
                   columns = ['col_1', 'col_2'])
df_1
--------------------------------------------------
	col_1	col_2
0	0		1
1	2		3
2	4		5

ここで一度、for文を回します。

for i in range(0, len(df_1)):
    print(str(i+1) + '行目')
    print('col_1=' + str(df_1['col_1'][i]))
    print('col_2=' + str(df_1['col_2'][i]))
--------------------------------------------------
1行目
col_1=0
col_2=1
2行目
col_1=2
col_2=3
3行目
col_1=4
col_2=5

問題なく回ります。
ここで、2行目の1を指定して削除します。

df_1 = df_1.drop(1)
df_1
--------------------------------------------------
	col_1	col_2
0	0		1
2	4		5

ここでもう一度for文を回します。

for i in range(0, len(df_1)):
    print(str(i+1) + '行目')
    print('col_1=' + str(df_1['col_1'][i]))
    print('col_2=' + str(df_1['col_2'][i]))
--------------------------------------------------
  1行目
col_1=0
col_2=1
2行目

KeyError: 1

削除した1でKeyErrorが発生しました。
reset_index()を使うと

df_1 = df_1.reset_index()
df_1
--------------------------------------------------
	index	col_1	col_2
0	0		0		1
1	2		4		5

旧indexを格納した列が先頭に作成されました。
これをfor文で回すと

df_1 = df_1.drop(['index'], axis=1)
for i in range(0, len(df_1)):
    print(str(i+1) + '行目')
    print('col_1=' + str(df_1['col_1'][i]))
    print('col_2=' + str(df_1['col_2'][i]))
--------------------------------------------------
1行目
col_1=0
col_2=1
2行目
col_1=4
col_2=5

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