自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

【Pandas】DataFrameをループして取り出す【列ごと、行ごとに取り出すにはdf.items()とdf.itertuples()でOK】

thumbnail

よくあるpandasの行ごと、列ごとにデータを取り出す方法。

環境

Python 3.8.10
numpy==1.23.4
pandas==1.5.1
python-dateutil==2.8.2
pytz==2022.5
six==1.16.0

列ごとにループして取り出す

.iteritems()は後のバージョンで廃止される可能性があるので、列ごとのループには.items()を使う

import pandas as pd

data                = {}
data["month"]       = [ str(i)+"月" for i in range(1,13) ]
data["page_view"]   = [ i*1000 for i in range(12) ]
data["earnings"]    = [ i*100 for i in range(12) ]

index               = [ str(i) for i in range(12) ]
df                  = pd.DataFrame( data, index=index )

## 列ごとにループする
for column_name, item in df.items():

    print(column_name)
    print(item)
    print(item["0"])
    print(item["1"])
    print(item["2"])

indexを指定して、取り出しができる。indexの値が文字列であれば、属性として呼び出すこともできる。

    print(item.one)
    print(item.two)
    print(item.three)

行ごとにループして取り出す

.iterrows()はindexを取り出す事ができるが、速度は.itertuples()に劣るので、できればitertuplesを使う方が良いだろう。

import pandas as pd

data                = {}
data["month"]       = [ str(i)+"月" for i in range(1,13) ]
data["page_view"]   = [ i*1000 for i in range(12) ]
data["earnings"]    = [ i*100 for i in range(12) ]

index               = [ str(i) for i in range(12) ]
df                  = pd.DataFrame( data, index=index )

## 行ごとにループする
for row in df.itertuples():

    print(row)
    print(row.month)
    print(row.page_view)
    print(row.earnings)

【補足】特定の行以降、特定の列のデータを取り出したい場合はこうする。

特定の行以降、特定の列のデータを取り出したい場合は、こうする。

# 行名が"1"以降のデータを取り出す。
df["4":]


特定の列
df["month"]

結論

  • 行ごとにループする時はdf.itertuples()
  • 列ごとにループする時はdt.items()

これで大抵の問題は解決できる。

スポンサーリンク

シェアボタン

Twitter LINEで送る Facebook はてなブログ