-1

我从 CSV 文件加载了这个巨大的 500 万 * 42 ndarray。在我进行一些处理并尝试将其保存到另一个 CSV 文件中,其类型为float.

我收到以下错误:

np.savetxt("inputFiles/fixed_X_"+self.file_name, X.astype(np.float), delimiter=",", fmt="%10.0f")
ValueError: could not convert string to float:

我想删除任何包含无法转换为浮点数的值的行(我相信它是 csv 文件中的空白单元格)但由于文件大小太大而我无法找到它(我不能甚至用excel打开它)。

4

1 回答 1

1

Numpy 数组不包含多种数据类型。我假设在这种情况下,您有一个类型为 str 或类型对象的数组。

如果您知道要删除的单元格是空白的,则可以使用以下内容删除这些行的数组:

X[ all(X != '',axis=1) ].astype(float)

本质上,给出 True/False 值列表的索引将为您提供仅包含 True 行的视图。这比实际删除行要快得多。你可以用任何你想要的测试来代替 X != ''。

A X !=or X =test 可能是您可以做到这一点的最快方法之一,因为一切都将在 numpy 内部完成。但是,您可以做的事情是有限的。

如果您真的想检查每个项目是否可以转换为浮点数,以下将起作用:

def canbefloat(x):
    try:
        float(x)
    except:
        return False
    else:
        return True
ucanbefloat = np.frompyfunc( canbefloat, 1, 1 )
X[ all( ucanbefloat(X.astype(object)), axis=1 ).astype(bool) ].astype(float)

然而,这大约慢了三倍。

于 2012-12-23T23:06:54.403 回答