Python初心者が意外と忘れがちなのが、PandasのDataFrameにおけるfor文の回し方です。
ここでは、こちらのデータをもとにfor文を回した処理方法を簡単にまとめます。
ドラクエです。このDataFrameをdfとします。
1カラムずつならiteritems()、1行ずつならiterrows()
この2つで対応できます。
iteritems() → カラム名、カラムのデータ(Series形状)を返す
iterrows() → ラベル名、ラベルのデータ(Series形状)を返す
それぞれ見ていきます。
1カラムずつ処理するiteritems()
左のカラムから順に、1カラムずつ処理する場合はiteritems()が使えます。
iterとはiterate(イタレーション)の頭文字で、繰り返しという意味です。
for column_name, item in df.iteritems():
print(column_name)
print(item)
HP
戦士 120
勇者 110
僧侶 75
魔法使い 50
Name: HP, dtype: int32
MP
戦士 0
勇者 30
僧侶 65
魔法使い 80
Name: MP, dtype: int64
「HP」カラム、「MP」カラムの順でデータを取り出すことができました。
1行ずつ処理するiterrows()
上の行から順に、1行ずつ処理する場合はiterrows()が使えます。
for row, item in df.iterrows():
print(row)
print(item)
戦士
HP 120
MP 0
Name: 戦士, dtype: int64
勇者
HP 110
MP 30
Name: 勇者, dtype: int64
僧侶
HP 75
MP 65
Name: 僧侶, dtype: int64
魔法使い
HP 50
MP 80
Name: 魔法使い, dtype: int64
「戦士」ラベル、「勇者」ラベル、「僧侶」ラベル、「魔法使い」ラベル、の順でデータを取り出すことができました。
最後に
1カラムずつがitercolumns()じゃなくてiteritems()なところがややこしいですが、DataFrameのデフォルトがカラム方向だと覚えておくといいかもしれません。
つまり、1行ずつというのはDataFrame界では邪道だから、明示的に”row”を入れてiterrows()にしたと思えば、迷わずに済みます。