首页 > 解决方案 > 如何在 loc 中使用具有多种可能格式的变量来切片带有 DatetimeIndex 的 pandas 数据帧

问题描述

我需要定义一个函数,该函数将对包含 DatetimeIndex 的数据帧执行多项操作。其中一项操作是根据作为函数参数之一传递的时间段或日期对数据帧进行切片。

在代码中使用 loc 时,切片对象接受不同的选项。例如:

df.loc['2004'] 

将所有行与 2004 年的日期切片

df.loc['2004-01':'2005-02'] 

对日期在 2004 年 1 月到 2005 年 2 月之间的所有行进行切片

我希望能够只使用函数的一个参数来构造进入 loc[] 的切片对象。就像是:

df.loc[period] 

其中 period 是作为参数之一传递给函数的变量,并且可以以不同的格式定义以由函数正确解释。

我试过了:

我发现这个答案这个答案很相似,但并不特定于我的需要。

我可以在函数中使用两个参数来解决这个问题(比如 start_date、end_date),但我想知道是否有任何方法可以只用一个来实现它。

标签: pythonpandasstringdatetimeindexpandas-loc

解决方案


内置切片应该适用于此:

# equivalent to df.loc['2004':]
period = slice('2004', None)
df.loc[period]

# equivalent to df.loc['2004-01':'2005-02'] 
period = slice('2004-01', '2005-02')
df.loc[period]

推荐阅读