为何两个有效float类型Pandas Series对象相除返回NaN?
问题原因及解决方案
核心原因:Pandas Series的索引对齐机制
你遇到的问题完全是因为Pandas Series运算时会严格按索引对齐,而非简单按元素位置匹配:
c_value_1是仅包含索引0的Series,对应值为0.188008c_value_2是仅包含索引1的Series,对应值为0.17636
当执行c_value_1 / c_value_2时,Pandas会遍历两个Series的所有索引:
- 索引
0的位置:c_value_2没有对应值,返回NaN - 索引
1的位置:c_value_1没有对应值,返回NaN
而.array属性返回的是Series底层的无索引数值集合,运算时直接按元素位置一一对应计算,不需要考虑索引,因此能得到正确结果。
几种解决方案
- 提取标量值计算:既然你确定每个查询仅返回一行,直接用
.iloc[0]取出标量再运算:
c_value_1.iloc[0] / c_value_2.iloc[0] # 结果:1.066046723747
- 忽略索引对齐:用
.array或.values获取底层数值数组运算:
c_value_1.array / c_value_2.array # 结果:<PandasArray([1.06604672]) dtype: float64>
- 统一索引后运算:重置两个Series的索引,让它们的索引一致:
c_value_1.reset_index(drop=True) / c_value_2.reset_index(drop=True) # 结果:0 1.066047 # dtype: float64
内容的提问来源于stack exchange,提问作者jjwest
相关产品推荐
相关产品推荐

