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

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


当前回答

如果你的日期是通过导入datetime包来标准化的,你可以简单地使用:

df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]  

使用datetime包来标准化你的日期字符串,你可以使用这个函数:

import datetime
datetime.datetime.strptime

其他回答

如果你的日期是通过导入datetime包来标准化的,你可以简单地使用:

df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]  

使用datetime包来标准化你的日期字符串,你可以使用这个函数:

import datetime
datetime.datetime.strptime

导入熊猫文库

进口熊猫作为pd

步骤1:使用pd.to_datetime()方法将日期列转换为字符串

   df['date']=pd.to_datetime(df["date"],unit='s')

第二步:以任何预定的方式进行筛选(即2个月)

  df = df[(df["date"] >"2022-03-01" & df["date"] < "2022-05-03")]

步骤3:检查输出

 print(df)

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

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

如果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已弃用。

在pandas版本1.1.3中,我遇到了基于python datetime的索引降序排列的情况。在这种情况下

df.loc['2021-08-01':'2021-08-31']

返回空的。而

df.loc['2021-08-31':'2021-08-01']

返回预期的数据。