在Pandas中对日期时间数据框进行子集选择

1 投票
1 回答
2596 浏览
提问于 2025-04-17 14:44

这是个基础问题,但我在这里总是遇到麻烦。

我有一个数据框(df):

df:
            val
date
2012-01-01  4.2      
2012-01-02  3.7
2012-01-03  6.2
2012-01-04  1.2
2012-01-05  2.4
2012-01-06  2.3
2012-01-08  4.5

如你所见,2012年1月7日这个日期不存在。如果我写:

exDate = 20120107
df.ix[str(exDate)]

我会遇到一个键错误(Key Error)。

在这种情况下,我想把我的exDate改成20120106(也就是20120107下面的最大日期)。有没有简单的方法可以检查一个索引,看看某个日期是否存在,如果不存在,就选择那个日期下面的下一个最大值(然后以YYYYmmdd的格式返回)?

另外,更一般来说,怎样才能简单地获取一个日期在20120107以下的索引子集呢?我在处理范围方面做得不错,但在选择某个日期的上下方面遇到了一些困难。

谢谢。

1 个回答

1

要获取日期在2012年1月7日之前的子数据框,你可以使用:

In [11]: df[:'2012-01-07']
Out[11]: 
            val
date           
2012-01-01  4.2
2012-01-02  3.7
2012-01-03  6.2
2012-01-04  1.2
2012-01-05  2.4
2012-01-06  2.3

如果你想用 irow 来选择最后一行的话:

In [12]: df[:'2012-01-07'].irow(-1)
Out[12]: 
val    2.3
Name: 2012-01-06

这样就能找到最后一个有效的日期:

In [13]: df[:'2012-01-07'].irow(-1).name
Out[13]: '2012-01-06'

撰写回答