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
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn