为何list[-1]无法返回列表内序列的最后一个元素?
问题原因及解决方法
你犯了个容易忽略的小错误:你把布尔判断的结果用方括号[]包起来了,这相当于创建了一个只装着pandas Series的单元素列表。
拆解错误逻辑
- 代码
[df1['Close'] / highest(df1['Close'],20) > 1]执行后,得到的是一个列表,列表里只有1个元素——就是那个长度3204的布尔Series。 - 当你用
[-1]索引这个列表时,取的是列表的最后(也是唯一)一个元素,也就是整个Series,所以输出和原来完全一致。
正确写法
直接去掉外层方括号,让表达式先返回Series,再用[-1]取最后一个元素:
(df1['Close'] / highest(df1['Close'],20) > 1)[-1]
或者用pandas更推荐的.iloc[-1](效果一致,可读性更强):
(df1['Close'] / highest(df1['Close'],20) > 1).iloc[-1]
这两种写法都会直接返回最后一行的布尔值,而非整个Series。
为什么你之前的转换写法能行?
你写的(df1['Close'] / highest(df1['Close'],20) > 1).iloc[-1:],括号的作用是让表达式优先计算成Series,再调用.iloc[-1:]取最后一行的切片。如果把[-1:]改成[-1],就能直接拿到单个布尔值了。
内容的提问来源于stack exchange,提问作者Rajib Lochan Sarkar
相关产品推荐
相关产品推荐

