Python中切片后Pandas Series加减运算无法正常运行问题求助
问题原因
Pandas 中两个 Series 执行算术运算时,默认会按照索引对齐进行计算,而非按元素的位置顺序匹配,这是你得到大量 NaN 的核心原因,和链式赋值没有关系。
- 未切片的
_close和_high索引都是从0到11的连续整数,索引完全匹配,所以相减后每个位置都有正常结果。 - 切片后的
d_close是_close[1:],它的索引范围是1~11;d_high是_high[:-1],它的索引范围是0~10。两者仅在索引1~10的区间存在重叠,只有这部分的计算会返回正常值,索引0和索引11因为找不到匹配的对应值,就会返回NaN。
解决方法
如果你的需求是按两个Series的元素位置顺序对齐相减,不需要保留原有索引的匹配逻辑,可以用以下两种常用方案:
方案1:转成Numpy数组后运算
直接调用.values或者.to_numpy()获取底层数组,数组运算会严格按位置匹配:
res = d_close.to_numpy() - d_high.to_numpy() # 如果需要转回Series,可以手动指定索引,比如保留d_close的索引: res_series = pd.Series(res, index=d_close.index) print(res_series)
方案2:重置两个Series的索引
把两个切片后的Series的索引重置为从0开始的连续整数,再做运算就会自动匹配:
d_close = _close[1:].reset_index(drop=True) d_high = _high[:-1].reset_index(drop=True) print(d_close - d_high)
内容的提问来源于stack exchange,提问作者Ahmed Sufiyan
相关产品推荐
相关产品推荐

