代码之家  ›  专栏  ›  技术社区  ›  Hrvoje

熊猫的lambda函数条件不能识别np.nan。

  •  1
  • Hrvoje  · 技术社区  · 6 年前

    在pandas数据帧上,我有一个函数,它将替换列中的以下内容 mileage :

    for index,row in carsDF6.iterrows():
        if carsDF6.loc[index,'mileage'] > 600000:
            carsDF6.loc[index,'mileage'] = np.nan
        if carsDF6.loc[index,'mileage'] < 4000:
            carsDF6.loc[index,'mileage'] = np.nan
    

    没问题。在那之后,我想用整列的平均数代替那些np.nan's 里程 我在用:

    carsDF6.mileage= carsDF6.mileage.map(lambda x: carsDF6.mileage.mean() if x == np.nan else x)
    

    它没有抛出任何错误,只是没有做它想做的,因为当我检查Nan的时:

    carsDF6.loc[carsDF6.isnull().any(axis=1)]
    

    它仍然与南的6张唱片一样。

    1 回复  |  直到 6 年前
        1
  •  2
  •   sacuL    6 年前

    最容易使用 fillna 平均值:

    carsDF6['mileage'] = carsDF6.mileage.fillna(carsDF6.mileage.mean())
    

    但是如果你想修正你的方法,你可以检查等式。 NaN 带着 np.isnan :

    carsDF6['mileage'] = carsDF6.mileage.map(lambda x: carsDF6.mileage.mean() if np.isnan(x)  else x)