如何在 loc 中使用具有多种可能格式的变量来使用 DatetimeIndex 对 pandas 数据帧进行切片
How to use a variable with multiple possible formats in loc to slice a pandas dataframe with a DatetimeIndex
我需要定义一个函数,该函数将对包含 DatetimeIndex 的数据帧执行多项操作。这些操作之一是根据作为函数参数之一传递的句点或日期对数据帧进行切片。
在代码中使用 loc 时,切片对象接受不同的选项。例如:
df.loc['2004']
对日期为 2004 年的所有行进行切片
df.loc['2004-01':'2005-02']
对日期在 2004 年 1 月和 2005 年 2 月之间的所有行进行切片
我希望能够仅使用函数的一个参数来构造进入 loc[] 的切片对象。类似于:
df.loc[period]
其中句点是作为参数之一传递给函数的变量,可以用不同的格式定义,以便函数正确解释。
我试过:
将字符串变量传递给 loc,例如将值构造为 "\'2004\'"+':'+"\'2005\'",但它 returns 一个KeyError "'2002':'2010'".
使用 pd.to_datetime 将字符串转换为日期时间对象。但这导致“2004”转换为 Timestamp('2004-01-01 00:00:00')
我发现 this answer and 类似,但不是我所需要的。
我可以在函数中使用两个参数来解决这个问题(类似于 start_date、end_date)但想知道是否只用一个参数就可以实现。
内置的 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]
我需要定义一个函数,该函数将对包含 DatetimeIndex 的数据帧执行多项操作。这些操作之一是根据作为函数参数之一传递的句点或日期对数据帧进行切片。
在代码中使用 loc 时,切片对象接受不同的选项。例如:
df.loc['2004']
对日期为 2004 年的所有行进行切片
df.loc['2004-01':'2005-02']
对日期在 2004 年 1 月和 2005 年 2 月之间的所有行进行切片
我希望能够仅使用函数的一个参数来构造进入 loc[] 的切片对象。类似于:
df.loc[period]
其中句点是作为参数之一传递给函数的变量,可以用不同的格式定义,以便函数正确解释。
我试过:
将字符串变量传递给 loc,例如将值构造为 "\'2004\'"+':'+"\'2005\'",但它 returns 一个KeyError "'2002':'2010'".
使用 pd.to_datetime 将字符串转换为日期时间对象。但这导致“2004”转换为 Timestamp('2004-01-01 00:00:00')
我发现 this answer and
我可以在函数中使用两个参数来解决这个问题(类似于 start_date、end_date)但想知道是否只用一个参数就可以实现。
内置的 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]