0

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

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

df.loc['2004'] 

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

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

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

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

df.loc[period] 

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

我试过了:

  • 将字符串变量传递给 loc,例如构造为 "\'2004\'"+':'+"\'2005\'" 的值,但它返回 KeyError "'2002':'2010'"。

  • 使用 pd.to_datetime 将字符串转换为日期时间对象。但这会导致“2004”转换为 Timestamp('2004-01-01 00:00:00')

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

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

4

1 回答 1

0

内置切片应该适用于此:

# 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]
于 2019-04-30T02:02:09.283 回答