如何为函数输出预留多列?TA-Lib BBANDS报错问题咨询
解决TA-Lib BBANDS输出多列的问题
你猜的完全没错!TA-Lib的BBANDS()函数确实会返回三个独立的数组(上轨、中轨、下轨),而你试图把这三个数组一次性塞进DataFrame的单个列里,自然会出现长度不匹配的错误——毕竟单个列只能容纳和DataFrame行数一致的一维数据,三个数组加起来的总长度是原索引的三倍,肯定对不上。
解决方法非常直接,只要把函数返回的三个值分别赋值给DataFrame的三个新列就行,代码示例如下:
# 直接解包三个返回值,分别对应布林带的上、中、下轨列 df['upperband'], df['middleband'], df['lowerband'] = talib.BBANDS( cl, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0 )
这样处理后,你的DataFrame就会新增三个列,每个列的长度都和原索引完全匹配,再也不会报长度不匹配的错误了。
另外给你个小技巧,如果后续需要对这三个布林带列做统一操作,可以先把列名存成列表,再一次性赋值,代码会更整洁:
# 用列表批量指定列名,一次性完成赋值 bollinger_cols = ['upperband', 'middleband', 'lowerband'] df[bollinger_cols] = talib.BBANDS(cl, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
这个写法和上面的解包效果完全一致,只是换了更简洁的批量赋值方式,适合需要管理多列的场景。
内容的提问来源于stack exchange,提问作者Ramsey
相关产品推荐
相关产品推荐

