我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。

实现这一目标的最佳方式是什么?


当前回答

我还不允许写评论,所以我会写一个答案,如果有人读了所有的评论,并找到了这个。

如果数据集的索引是一个日期时间,并且您想仅通过(例如)月份过滤它,您可以执行以下操作:

df.loc[df.index.month == 3]

它将在3月份为您过滤数据集。

其他回答

用pyjanitor怎么样

它有很酷的功能。

pip后安装pyjanitor

import janitor

df_filtered = df.filter_date(your_date_column_name, start_date, end_date)

根据我的经验,前面的答案是不正确的,你不能传递一个简单的字符串,需要一个datetime对象。所以:

import datetime 
df.loc[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)]

如果您已经使用pd将字符串转换为日期格式。To_datetime你可以使用:

df = df [(df[日期]>”2018-01-01”)及(df[日期]<”2019-07-01”)

如果date列是索引,则使用.loc进行基于标签的索引,或使用.iloc进行位置索引。

例如:

df.loc['2014-01-01':'2014-02-01']

详情见这里http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection

如果列不是索引,你有两个选择:

将其作为索引(如果是时间序列数据,可以是临时索引,也可以是永久索引) df [(df(“日期”)> 2013-01-01)& (df(“日期”)< ' 2013-02-01 '))

请看这里的一般解释

注意:.ix已弃用。

# 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]