python - 如何在 loc 中使用具有多种可能格式的变量来切片带有 DatetimeIndex 的 pandas 数据帧
问题描述
我需要定义一个函数,该函数将对包含 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),但我想知道是否有任何方法可以只用一个来实现它。
解决方案
内置切片应该适用于此:
# 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]
推荐阅读
- sql-server - sql server 2016 中的 ENABLE_QUERY_OPTIMIZER_HOTFIXES 提示启用了哪些修复?
- java - Selenium Web Driver Java Element 类如何?
- linux - 使用shell从两个日期中查找天数
- ansible - 无法建立 PyEZ 连接:ConnectUnknownHostError
- r - 识别光栅文件中的 CRS
- reactjs - 如何在第三方库上禁用 React 严格模式
- vue.js - V-model 填充在不更新 DOM 的方法中
- reactjs - Google Maps React,使用 lat lng 添加标记
- php - Javascript window.open() 但在 Laravel
- asp.net - 奇怪的异常测试 EmailSender