Python PR

DataFrameにてfor文を回す(1カラムずつならiteritems()、1行ずつならiterrows())

記事内に商品プロモーションを含む場合があります

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()にした思えば、迷わずに済みます。