我有一个Pandas DataFrame,其中有一个“date”列。现在我需要过滤掉DataFrame中所有日期超出未来两个月的行。本质上,我只需要保留在未来两个月内的行。
如何最好地实现这一目标?
import pandas as pd
步骤1:使用pd.to_datetime()将日期列转换为Pandas日期时间格式。
df['date']=pd.to_datetime(df["date"],unit='s')
步骤2:以任何预定的方式(例如2个月)执行过滤。
df = df[(df["date"] >"2022-03-01" & df["date"] < "2022-05-03")]
您可以通过以下方式选择时间范围:df.loc['开始日期':'结束日期']
df.loc['2021-08-01':'2021-08-31']
返回为空。然而
df.loc['2021-08-31':'2021-08-01']
返回了预期数据。
使用pyjanitor
怎么样呢?
它有许多很酷的功能。
pip install pyjanitor
之后即可使用。
import janitor
df_filtered = df.filter_date(your_date_column_name, start_date, end_date)
如果您想使用.query()方法,另一种解决方案是可行的。
它允许您编写易读的代码,例如.query(f"{start} < MyDate < {end}"),但需要权衡考虑,.query()会解析字符串,且列值必须采用pandas日期格式(以便.query()能够理解)。
df = pd.DataFrame({
'MyValue': [1,2,3],
'MyDate': pd.to_datetime(['2021-01-01','2021-01-02','2021-01-03'])
})
start = datetime.date(2021,1,1).strftime('%Y%m%d')
end = datetime.date(2021,1,3).strftime('%Y%m%d')
df.query(f"{start} < MyDate < {end}")
# 60 days from today
after_60d = pd.to_datetime('today').date() + datetime.timedelta(days=60)
# filter date col less than 60 days date
df[df['date_col'] < after_60d]