-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ファイルでは空白のセルだと思います)、ファイルサイズが大きいために見つけることができません(できません)エクセルで開くこともできます)。

4

1 に答える 1

1

Numpy配列は、複数のデータ型を保持しません。この場合、str型またはobject型の配列があると想定しています。

削除するセルが空白であることがわかっている場合は、次の方法でそれらの行が削除された配列を取得できます。

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

基本的に、True / False値のリストのインデックスを指定すると、True行のみのビューが表示されます。これは、実際に行を削除するよりもはるかに高速です。X!=''の代わりに、任意のテストを配置できます。

X !=またはテストは、すべてがnumpyで内部的に実行されるため、おそらくこれX =を実行できる最速の方法の1つです。ただし、できることには限りがあります。

各アイテムをフロートに変換できるかどうかを実際に確認したい場合は、次のように機能します。

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)

ただし、これは約3倍遅くなります。

于 2012-12-23T23:06:54.403 に答える