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

