如何在loc中使用具有多种可能格式的变量以使用DatetimeIndex

时间:2019-04-30 01:19:25

标签: python string pandas datetimeindex loc

我需要定义一个函数,该函数将对包含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将字符串转换为datetime对象。但这会导致“ 2004”转换为时间戳('2004-01-01 00:00:00')

我发现this answerthis answer相似,但并不完全符合我的需求。

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

1 个答案:

答案 0 :(得分:0)

slice内置插件应对此起作用:

# 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]