首页 文章

python pandas在整数比较中忽略Nan

提问于
浏览
0

我试图创建基于整数比较的虚拟变量,其中Nan是常见的 . 如果存在任何Nan值,则A>比较会引发错误,但我希望比较返回Nan . 我知道我可以使用fillna()来替换Nan,我知道这个值是假的,但我希望有更优雅的方法来做到这一点 . 我需要更改fillna()中的值,如果我使用少于,或使用可能是正面或负面的变量,这是另一个创建错误的机会 . 有没有办法让30 <Nan = Nan?

要清楚,我想要这个:

df['var_dummy'] = df[df['var'] >= 30].astype('int')

如果var为null则返回null;如果是30则返回0,否则返回0 . 目前我得到ValueError:无法从重复轴重新索引 .

1 回答

  • 4

    这是一种方式:

    s1 = pd.Series([1, 3, 4, 2, np.nan, 5, np.nan, 7])
    s2 = pd.Series([2, 1, 5, 5, np.nan, np.nan, 2, np.nan])
    
    (s1 < s2).mask(s1.isnull() | s2.isnull(), np.nan)
    Out: 
    0    1.0
    1    0.0
    2    1.0
    3    1.0
    4    NaN
    5    NaN
    6    NaN
    7    NaN
    dtype: float64
    

    这掩盖了从 (s1 < s2) 返回的布尔数组(如果它们中的任何一个是NaN) . 在这种情况下,它返回NaN . 但是你不能在一个布尔数组中使用NaN,因此它将被转换为float .

相关问题