我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。
实现这一目标的最佳方式是什么?
我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。
实现这一目标的最佳方式是什么?
当前回答
如果您的datetime列具有Pandas datetime类型(例如datetime64[ns]),为了进行适当的过滤,您需要pd。时间戳对象,例如:
from datetime import date
import pandas as pd
value_to_check = pd.Timestamp(date.today().year, 1, 1)
filter_mask = df['date_column'] < value_to_check
filtered_df = df[filter_mask]
其他回答
如果日期在索引中,则简单地:
df['20160101':'20160301']
# 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]
如果你的日期是通过导入datetime包来标准化的,你可以简单地使用:
df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]
使用datetime包来标准化你的日期字符串,你可以使用这个函数:
import datetime
datetime.datetime.strptime
在pandas版本1.1.3中,我遇到了基于python datetime的索引降序排列的情况。在这种情况下
df.loc['2021-08-01':'2021-08-31']
返回空的。而
df.loc['2021-08-31':'2021-08-01']
返回预期的数据。
根据我的经验,前面的答案是不正确的,你不能传递一个简单的字符串,需要一个datetime对象。所以:
import datetime
df.loc[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)]