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