我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。
实现这一目标的最佳方式是什么?
我有一个熊猫DataFrame与“日期”列。现在我需要过滤掉DataFrame中日期在未来两个月之外的所有行。实际上,我只需要保留接下来两个月内的行。
实现这一目标的最佳方式是什么?
当前回答
如果你想使用.query()方法,这是另一种解决方案。
它允许你使用编写可读的代码,如.query(f"{start} < MyDate < {end}")的权衡,.query()解析字符串,列值必须是熊猫日期格式(这样。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}")
(下面是@Phillip Cloud的评论,@Retozi的回答)
其他回答
如果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已弃用。
如果日期在索引中,则简单地:
df['20160101':'20160301']
如果您已经使用pd将字符串转换为日期格式。To_datetime你可以使用:
df = df [(df[日期]>”2018-01-01”)及(df[日期]<”2019-07-01”)
你可以通过这样做来选择时间范围:df.loc['start_date':'end_date']
# 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]