Pandas の日付に基づいて DataFrame 行をフィルタリングする方法
- ブールマスクを使用して 2つの日付の間の行を選択する
-
2つの日付の間の
DataFrame
行を選択するためのpandas.DataFrame.query()
-
2つの日付の間の
DataFrame
行を選択するためのpandas.DataFrame.isin()
-
2つの日付間の
DataFrame
行を選択するためのpandas.Series.between()
loc
メソッドと DataFrame インデックスを使用したブールマスクを使用して、Pandas の日付に基づいて DataFrame
行をフィルタリングできます。また、DataFrame
オブジェクトの query
、isin
、および between
メソッドを使用して、Pandas の日付に基づいて行を選択することもできます。
ブールマスクを使用して 2つの日付の間の行を選択する
ブールマスクを使用して Pandas の日付に基づいて DataFrame 行をフィルター処理するには、最初に次の構文を使用してブールマスクを作成します。
mask = (df['col'] > start_date) & (df['col'] <= end_date)
ここで、start_date
と end_date
はどちらも datetime
形式で、データをフィルターする必要がある範囲の開始と終了を表します。次に、df.loc()
メソッドを使用して、範囲内にある DataFrame の部分を選択します。
import pandas as pd
import numpy as np
import datetime
list_of_dates = ['2019-11-20', '2020-01-02', '2020-02-05','2020-03-10','2020-04-16','2020-05-01']
employees=['Hisila', 'Shristi','Zeppy','Alina','Jerry','Kevin']
df = pd.DataFrame({'Joined date': pd.to_datetime(list_of_dates)},index=employees)
mask = (df['Joined date'] > '2019-06-1') & (df['Joined date'] <= '2020-02-05')
filtered_df=df.loc[mask]
print(filtered_df)
出力:
Joined date
Hisila 2019-11-20
Shristi 2020-01-02
Zeppy 2020-02-05
日付列をインデックス列として設定することにより、統合された df.loc[start_date:end_date]
メソッドを使用して上記のプロセスを簡略化できます。
import pandas as pd
import numpy as np
import datetime
list_of_dates = ['2019-11-20', '2020-01-02', '2020-02-05','2020-03-10','2020-04-16','2020-05-01']
employees=['Hisila', 'Shristi','Zeppy','Alina','Jerry','Kevin']
salary=[200,400,300,500,600,300]
df = pd.DataFrame({"Name":employees,'Joined date': pd.to_datetime(list_of_dates),"Salary":salary})
df = df.set_index(['Joined date'])
filtered_df=df.loc['2019-06-1':'2020-02-05']
print(filtered_df)
出力:
Name Salary
Joined date
2019-11-20 Hisila 200
2020-01-02 Shristi 400
2020-02-05 Zeppy 300
2つの日付の間の DataFrame
行を選択するための pandas.DataFrame.query()
pandas.DataFrame.query()
を使用して、Pandas の日付に基づいて DataFrame 行をフィルタリングすることもできますメソッド。このメソッドは、指定されたクエリ式の結果である DataFrame を返します。
import pandas as pd
import numpy as np
import datetime
list_of_dates = ['2019-11-20', '2020-01-02', '2020-02-05','2020-03-10','2020-04-16','2020-05-01']
employees=['Hisila', 'Shristi','Zeppy','Alina','Jerry','Kevin']
salary=[200,400,300,500,600,300]
df = pd.DataFrame({"Name":employees,'Joined_date': pd.to_datetime(list_of_dates),"Salary":salary})
filtered_df=df.query("Joined_date >= '2019-06-1' and Joined_date <='2020-02-05'")
print(filtered_df)
出力:
Name Joined_date Salary
0 Hisila 2019-11-20 200
1 Shristi 2020-01-02 400
2 Zeppy 2020-02-05 300
2つの日付の間の DataFrame
行を選択するための pandas.DataFrame.isin()
pandas.DataFrame.isin()
は、要素かどうかを表すブール値の DataFrame を返します指定された範囲内にあるかどうか。このメソッドを使用して、Pandas の日付に基づいて DataFrame 行をフィルター処理できます。
import pandas as pd
import numpy as np
import datetime
list_of_dates = ['2019-11-20', '2020-01-02', '2020-02-05','2020-03-10','2020-04-16','2020-05-01']
employees=['Hisila', 'Shristi','Zeppy','Alina','Jerry','Kevin']
salary=[200,400,300,500,600,300]
df = pd.DataFrame({"Name":employees,'Joined_date': pd.to_datetime(list_of_dates),"Salary":salary})
filtered_df = df[df["Joined_date"].isin(pd.date_range('2019-06-1', '2020-02-05'))]
print(filtered_df)
出力:
Name Joined_date Salary
0 Hisila 2019-11-20 200
1 Shristi 2020-01-02 400
2 Zeppy 2020-02-05 300
pandas.date_range()
は固定された DateTimeIndex
を返します。最初のパラメーターは開始日、2 番目のパラメーターは終了日です。
2つの日付間の DataFrame
行を選択するための pandas.Series.between()
pandas.Series.between()
を使用して、日付に基づいて DataFrame をフィルタリングすることもできますこのメソッドは、系列要素が指定された範囲内にあるかどうかを表すブールベクトルを返します。このようにして取得したブールベクトルを loc()
メソッドに渡して、DataFrame を抽出します。
import pandas as pd
import numpy as np
import datetime
list_of_dates = ['2019-11-20', '2020-01-02', '2020-02-05','2020-03-10','2020-04-16','2020-05-01']
employees=['Hisila', 'Shristi','Zeppy','Alina','Jerry','Kevin']
salary=[200,400,300,500,600,300]
df = pd.DataFrame({"Name":employees,'Joined_date': pd.to_datetime(list_of_dates),"Salary":salary})
filtered_df =df.loc[df["Joined_date"].between('2019-06-1', '2020-02-05')]
print(filtered_df)
出力:
Name Joined_date Salary
0 Hisila 2019-11-20 200
1 Shristi 2020-01-02 400
2 Zeppy 2020-02-05 300