用范围内的随机值替换NaN

2024-10-01 00:15:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用此代码将NaN替换为范围内的随机值

import numpy as np
def processNan (x):
     return np.random.choice([1.0, 2.0])
assure['codeTypePieceIdentite'] = assure['codeTypePieceIdentite'].apply(lambda x: processNan(x) if x is nan else x)

因为某种原因它不起作用什么都没有改变

result


Tags: lambda代码importnumpyreturndefasnp
3条回答

尽可能避免使用.apply,因为它不利用矢量化,所以不是最佳解决方案。在这种情况下,您可以执行以下操作:

mask = df["codeTypePieceIdentite"].isna()
df.loc[mask, "codeTypePieceIdentite"] = np.random.choice([1,2], mask.sum())

您应该改用math.isnan(x)

import numpy as np
import math
def processNan (x):
    return np.random.choice([1.0, 2.0])
assure['codeTypePieceIdentite'] = assure['codeTypePieceIdentite'].apply(lambda x: 
processNan(x) if math.isnan(x) else x)

要编写地道的pandas代码,您应该尽可能使用pandas或numpy包,而不是Python内置或其他Python补充包

pandas提供了通用函数^{}^{},用于检测类数组对象的缺失/非缺失值。您的代码可以修改为使用pd.isna(),如下所示:

assure['codeTypePieceIdentite'] = \
    assure['codeTypePieceIdentite'].apply(lambda x: processNan(x) if pd.isna(x) else x)

使用熊猫的主要优势;numpy是指它们从其ndarray数据类型中提供高效的阵列处理,该数据类型已在其基础设计中针对性能考虑进行了优化。numpy也很常用,因为熊猫是基于numpy建造的

对于检查pandas系列和DataFrame的nan值,pd.isna()pd.notna()是显而易见的选择。对于检查pandas系列中的单个元素,尽管您也可以使用pandas或numpy以外的包,但只要您正在处理pandas对象,仍然建议使用pandas函数。这将帮助您编写惯用代码,并在导入额外的补充包时为您节省一些系统资源(内存和处理时间)

相关问题 更多 >