如何在pandas数据帧中用NaN替换所有非数字条目?

use*_*438 6 python pandas

我有各种csv文件,我将它们导入为DataFrame.问题是许多文件使用不同的符号来表示缺失值.有些人使用nan,其他人使用NaN,ND,无,丢失等等,或只是将条目空白.有没有办法用np.nan替换所有这些值?换句话说,数据框中的任何非数字值都将变为np.nan.感谢您的帮助.

ins*_*ant 9

我发现我认为是一种相对优雅但也很健壮的方法:

def isnumber(x):
    try:
        float(x)
        return True
    except:
        return False

df[df.applymap(isnumber)]
Run Code Online (Sandbox Code Playgroud)

如果不清楚:您定义了一个函数,该函数True仅在您拥有的任何输入可以转换为浮点数时才返回。然后您df使用该布尔数据框进行过滤,该数据框会自动分配NaN给您未过滤的单元格。

我尝试的另一个解决方案是定义isnumber

import number
def isnumber(x):
    return isinstance(x, number.Number)
Run Code Online (Sandbox Code Playgroud)

但我不太喜欢这种方法的一点是,您可能会不小心将数字作为字符串,因此您会错误地将它们过滤掉。这也是一个偷偷摸摸的错误,因为数据帧显示的字符串"99"与数字相同99

编辑:

在您的情况下,您可能仍然需要df = df.applymap(float)在过滤后进行,因为它float适用于 的所有不同大小写'nan',但在您明确转换它们之前,它们仍将被视为数据框中的字符串。