如果数据类型错误,请删除ndarray numpy行

时间:2012-12-23 08:52:24

标签: python numpy multidimensional-array

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

我收到以下错误:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

X !=X =测试可能是您执行此操作的最快方法之一,因为所有内容都将在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)
然而,这个速度要慢三倍。