Pandas Series相减时如何避免NaN?缺失值按0处理的简便方法
解决Pandas Series减法时缺失值视为0的简便方法
当然有更省心的办法!完全不用手动插入0,Pandas 内置的方法就能直接搞定这个需求。
核心思路是用 Series 的sub()方法,并指定fill_value=0参数——这个参数会自动把两个 Series 中不存在对应索引的位置用0来填充,再执行减法运算。
举个实际的例子看效果:
import pandas as pd # 创建两个测试Series s1 = pd.Series([5, 3, 7], index=['a', 'b', 'c']) s2 = pd.Series([2, 4], index=['a', 'c']) # 直接减法会得到NaN print(s1 - s2) # 输出: # a 3.0 # b NaN # c 3.0 # dtype: float64 # 用sub()加fill_value参数,缺失值自动按0处理 print(s1.sub(s2, fill_value=0)) # 输出: # a 3.0 # b 3.0 # c 3.0 # dtype: float64
原理很简单:当运算时遇到其中一个Series没有的索引(比如例子里的b),fill_value=0会把缺失的那一方的值替换成0,所以3 - 0 = 3,完美解决NaN的问题。
另外补充一下:Pandas里的其他算术方法(比如加法add()、乘法mul()、除法div())也都支持fill_value参数,用法完全一致,遇到类似的需求都可以用这个思路解决。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

