pandas创建新列时提示Timestamp不再支持加减整数错误如何解决?
报错原因
你的x_valid索引为Timestamp时间戳类型,你在列表推导式中执行i+1操作时,是直接对时间戳类型的值做整数加法,新版pandas已经不支持时间戳与整数直接加减的用法,因此触发类型错误。
同时遍历索引取值的写法效率极低,更推荐用pandas内置向量化操作实现需求。
最优解决方案
你要实现「下一日价格高于当日就标记1,否则标记0」的需求,直接用shift()方法做序列移位对比即可,代码如下:
# shift(-1)表示将序列整体向上移位1位,取对应下一行的值 new['Shares'] = (x_valid.shift(-1) > x_valid).astype(int) # 若最后一行无下一日数据不需要保留,可执行下面的代码删除最后一行 # new = new.iloc[:-1]
如果x_valid是多列DataFrame,需要指定对比的价格列,例如价格列名为close,修改为:
new['Shares'] = (x_valid['close'].shift(-1) > x_valid['close']).astype(int)
原写法兼容修复方案(不推荐,仅做参考)
如果一定要保留遍历的写法,需要遍历位置下标而非时间戳索引,修改如下:
# range(len(new)-1)避免最后一行下标越界,最后补0作为最后一行的默认值 new['Shares'] = [1 if x_valid.iloc[i+1] > x_valid.iloc[i] else 0 for i in range(len(new)-1)] + [0]
内容的提问来源于stack exchange,提问作者AM EXPO
相关产品推荐
相关产品推荐

