如何从含缺失值的pandas数据框中提取数值以进行数学运算?
把pandas缺失值布尔标记转成数值类型
我懂你的需求啦——你现在用dfs['REV_PIZ'].isna()得到的是布尔值组成的Series,但想要转成纯数值(1代表缺失,0代表非缺失)来做后续的数学运算,对吧?这里有几种简单可靠的方法可以实现:
方法一:直接转换数据类型
布尔值在pandas里本质上可以被当作1(True)和0(False),但如果要明确转成整数类型,用astype(int)就可以:d = dfs['REV_PIZ'].isna().astype(int)这样得到的
d就是整数类型的Series,完全可以直接用于加减乘除等数学运算。方法二:用replace做值映射
如果想要更直观地定义缺失值对应的数值,可以用replace方法手动指定映射关系:d = dfs['REV_PIZ'].isna().replace({True: 1, False: 0})这种方式灵活性更高,比如后续如果需要把缺失值标记为其他数值(比如-1),直接修改映射字典就行。
方法三:用numpy.where生成数值数组
如果你习惯用numpy的工具,也可以用np.where来生成数值结果:import numpy as np d = np.where(dfs['REV_PIZ'].isna(), 1, 0)这个方法返回的是numpy数组,如果需要保持pandas Series的结构,再转一下就行:
import pandas as pd d = pd.Series(d, index=dfs.index)
补充一句:如果只是临时做数学运算,甚至不用转换——因为在pandas的运算中,布尔值会自动被解析为1和0,比如计算缺失值的数量,直接dfs['REV_PIZ'].isna().sum()就可以得到缺失值的总数,本质就是把True当作1求和。但如果需要把这个标记列作为数值列长期使用,上面的转换方法就很有必要啦。
内容的提问来源于stack exchange,提问作者MikiBelavista
相关产品推荐
相关产品推荐

