根据其他列更改值时,Pandas NaN 值会导致问题

为什么 Pandas 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


慕标琳琳
浏览 147回答 2
2回答

幕布斯6054654

使用numpy.where或loc,用于检查缺失值使用特殊功能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.Bprint (df)   A    B  C0  1  NaN  d1  2    a  a2  2    b  b3  3    c  c有关使用缺失数据检查文档的更多信息。

杨__羊羊

def change_val(df):    if df.A==1 and pd.isnull(df.B):        return df.C    else:        return df.BNaN 是无值将不等于任何值,甚至不等于 Nan 本身,因此使用 isnull()/isna()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python