Pandas の DataFrame の行を反復する方法

Suraj Joshi 2023年1月30日 2020年6月13日
  1. Pandas DataFrame の行を繰り返し処理する index 属性
  2. Python で DataFrame の行を繰り返し処理する loc[] メソッド
  3. Python で DataFrame の行を繰り返し処理する iloc[] メソッド
  4. 行 Pandas を反復するための pandas.DataFrame.iterrows()
  5. 行 Pandas を反復するための pandas.DataFrame.itertuples
  6. ##行 Pandas を反復する pandas.DataFrame.apply
Pandas の DataFrame の行を反復する方法

DataFrame の index 属性を使用して、Pandas DataFrame の行をループできます。DataFrame オブジェクトの loc()iloc()iterrows()itertuples()iteritems()、および apply() メソッドを使用して、Pandas DataFrame の行を繰り返し処理することもできます。

次のセクションでは、例として以下の DataFrame を使用します。

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13','April-14','April-16']
income1=[10,20,10,15,10,12]
income2=[20,30,10,5,40,13]

df=pd.DataFrame({"Date":dates,
                "Income_1":income1,
                "Income_2":income2})

print(df)

出力:

       Date  Income_1  Income_2
0  April-10        10        20
1  April-11        20        30
2  April-12        10        10
3  April-13        15         5
4  April-14        10        40
5  April-16        12        13

Pandas DataFrame の行を繰り返し処理する index 属性

Pandas DataFrame の index 属性は、DataFrame の最上行から最下行までの範囲オブジェクトを提供します。範囲を使用して、Pandas の行を反復できます。

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13','April-14','April-16']
income1=[10,20,10,15,10,12]
income2=[20,30,10,5,40,13]

df=pd.DataFrame({"Date":dates,
                "Income_1":income1,
                "Income_2":income2})

for i in df.index: 
     print("Total income in "+ df["Date"][i]+ " is:"+str(df["Income_1"][i]+df["Income_2"][i]))

出力:

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

各行の Income_1Income_2 を追加し、総収入を出力します。

Python で DataFrame の行を繰り返し処理する loc[] メソッド

loc[] メソッドは、一度に 1つの行にアクセスするために使用されます。DataFrame のループ内で loc[] メソッドを使用すると、DataFrame の行を繰り返し処理できます。

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13','April-14','April-16']
income1=[10,20,10,15,10,12]
income2=[20,30,10,5,40,13]

df=pd.DataFrame({"Date":dates,
                "Income_1":income1,
                "Income_2":income2})

for i in range(len(df)): 
     print("Total income in "+ df.loc[i,"Date"]+ " is:"+str(df.loc[i,"Income_1"]+df.loc[i,"Income_2"]))

出力:

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

ここで、range(len(df)) は、DataFrame の行全体をループする範囲オブジェクトを生成します。

Python で DataFrame の行を繰り返し処理する iloc[] メソッド

Pandas DataFrame の iloc 属性も loc 属性に非常に似ています。lociloc の唯一の違いは、loc ではアクセスする行または列の名前を指定する必要があることですが、iloc ではアクセスする行または列のインデックスを指定します。

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13','April-14','April-16']
income1=[10,20,10,15,10,12]
income2=[20,30,10,5,40,13]

df=pd.DataFrame({"Date":dates,
                "Income_1":income1,
                "Income_2":income2})

for i in range(len(df)): 
     print("Total income in "+ df.iloc[i,0]+ " is:"+str(df.iloc[i,1]+df.iloc[i,2]))

出力:

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

ここで、インデックス 0 は DataFrame の最初の列、つまり Date を表し、インデックス 1Income_1 列を表し、インデックス 2Income_2 列を表します。

行 Pandas を反復するための pandas.DataFrame.iterrows()

pandas.DataFrame.iterrows() は、インデックスを返します行と行のデータ全体をシリーズとして。したがって、この関数を使用して、Pandas DataFrame の行を繰り返し処理できます。

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13','April-14','April-16']
income1=[10,20,10,15,10,12]
income2=[20,30,10,5,40,13]

df=pd.DataFrame({"Date":dates,
                "Income_1":income1,
                "Income_2":income2})

        
for index, row in df.iterrows(): 
    print("Total income in "+ row["Date"]+ " is:"+str(row["Income_1"]+row["Income_2"]))

出力:

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

行 Pandas を反復するための pandas.DataFrame.itertuples

pandas.DataFrame.itertuples はオブジェクトを返し、各行のタプルを繰り返し処理します最初のフィールドはインデックスとして、残りのフィールドは列値として。したがって、この関数を使用して Pandas DataFrame の行を繰り返し処理することもできます。

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13','April-14','April-16']
income1=[10,20,10,15,10,12]
income2=[20,30,10,5,40,13]

df=pd.DataFrame({"Date":dates,
                "Income_1":income1,
                "Income_2":income2})

        
for row in df.itertuples():
    print("Total income in "+ row.Date+ " is:"+str(row.Income_1+row.Income_2))

出力:

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

##行 Pandas を反復する pandas.DataFrame.apply

pandas.DataFrame.apply は DataFrame を返します
DataFrame の特定の軸に沿って特定の関数を適用した結果として。

構文:

DataFrame.apply(self, 
                func, 
                axis=0, 
                raw=False, 
                result_type=None, 
                args=(), 
                **kwds)

ここで、func は適用される関数を表し、axis は関数が適用される軸を表します。axis = 1 または axis = 'columns'を使用して、各行に関数を適用できます。

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13','April-14','April-16']
income1=[10,20,10,15,10,12]
income2=[20,30,10,5,40,13]

df=pd.DataFrame({"Date":dates,
                "Income_1":income1,
                "Income_2":income2})

        
print(df.apply(lambda row: "Total income in "+ row["Date"]+ " is:"+str(row["Income_1"]+row["Income_2"]),axis=1))

出力:

0    Total income in April-10 is:30
1    Total income in April-11 is:50
2    Total income in April-12 is:20
3    Total income in April-13 is:20
4    Total income in April-14 is:50
5    Total income in April-16 is:25
dtype: object

ここでは、lambda キーワードを使用して、各行に適用されるインライン関数を定義しています。

Author: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas DataFrame

関連記事 - Pandas DataFrame Row