熊猫NaN值在根据其他列更改值时引起麻烦

时间:2018-10-10 08:49:40

标签: python pandas numpy

为什么熊猫NaN值有时会键入numpy.float64,有时会浮动? 当我想使用函数并根据其他列更改数据框中的值时,这真令人困惑

示例:

   A    B    C
0  1  NaN    d
1  2    a    s
2  2    b    s
3  3    c  NaN

我有一个def来更改C列的值

def change_val(df):
    if df.A==1 and df.B==np.nan:
        return df.C
    else:
        return df.B

然后我将此功能应用于C列

df['C']=df.apply(lambda x: change_val(x),axis=1)

df.B==np.nan出问题了,请问我该如何正确表达?

所需结果:

   A    B    C
0  1  NaN    d
1  2    a    a
2  2    b    b
3  3    c    c

2 个答案:

答案 0 :(得分:2)

使用numpy.whereloc,使用特殊功能Series.isna来检查缺失值:

mask = (df.A==1) & (df.B.isna())
#oldier pandas versions
#mask = (df.A==1) & (df.B.isnull())
df['C'] = np.where(mask, df.C, df.B)

或者:

df.loc[~mask, 'C'] = df.B

print (df)
   A    B  C
0  1  NaN  d
1  2    a  a
2  2    b  b
3  3    c  c

有关处理丢失的数据的更多信息,请检查docs

答案 1 :(得分:0)

def change_val(df):
    if df.A==1 and pd.isnull(df.B):
        return df.C
    else:
        return df.B

NaN是没有值,甚至是Nan也不会等于任何值,因此请使用isull()/ isna()