我正在使用此代码将 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)
由于某种原因它不起作用,没有任何变化
答案 0 :(得分:2)
尽可能避免使用 .apply
,它不是最佳解决方案,因为它没有利用矢量化。在这种情况下,您可以执行以下操作:
mask = df["codeTypePieceIdentite"].isna()
df.loc[mask, "codeTypePieceIdentite"] = np.random.choice([1,2], mask.sum())
答案 1 :(得分:1)
您应该改用 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)
答案 2 :(得分:1)
要编写惯用的pandas代码,您应该尽可能使用pandas或numpy包,而不是Python内置或其他Python补充包。 >
pandas 提供通用函数 pd.isna()
和 pd.notna()
用于检测类数组对象的缺失/非缺失值。您可以修改您的代码以使用 pd.isna()
,如下所示:
assure['codeTypePieceIdentite'] = \
assure['codeTypePieceIdentite'].apply(lambda x: processNan(x) if pd.isna(x) else x)
使用 pandas 和 numpy 的主要优点是它们从其 ndarray 数据类型提供高效的数组处理,该数据类型在其基本设计中已针对性能考虑进行了优化。 numpy 也很常用,因为 pandas 是基于 numpy 构建的。
为了检查 pandas Series 和 DataFrame 的 nan 值,pd.isna()
和 pd.notna()
是显而易见的选择。为了检查pandas系列中的单个元素,虽然你也可以使用pandas或numpy以外的包,但只要你在处理pandas对象,它仍然是使用pandas函数的推荐方式。这有助于您编写惯用的 Pandas 代码,并在导入额外的补充包时为您节省一些系统资源(内存和处理时间)。