使用pandas loc索引时如何强制始终保留Date作为行索引
解决方案
你可以通过以下任意一种方式强制返回DataFrame结构,永久保留Datetime索引:
方法1:用列表包裹筛选的日期值(最简便)
给loc方法传入包含目标日期的列表,哪怕只有一个日期元素,pandas就不会触发自动降维逻辑,始终返回DataFrame:a = df.loc[[date]]单条匹配时的返回结果会保持如下结构:
Symbol Order Shares Date 2011-01-26 GOOG BUY 1000方法2:用布尔索引筛选
通过索引匹配的布尔条件筛选,不管匹配结果有多少条,都会返回DataFrame:a = df.loc[df.index == date]方法3:结果转换(适配已拿到Series的场景)
如果已经通过df.loc[date]拿到了Series结果,可以手动转换回带日期索引的DataFrame:a = df.loc[date].to_frame().T转换后会自动把原Series的name属性(也就是对应的日期)设为行索引。
原理说明
pandas的.loc索引默认存在自动降维规则:当筛选结果仅有一行时,会自动将二维的DataFrame降为一维的Series。上述方法都是通过避免触发降维规则、或者手动恢复二维结构,来实现保留Datetime行索引的需求,和行索引是否设置了自定义名称无关。
内容的提问来源于stack exchange,提问作者user2421555
相关产品推荐
相关产品推荐

