3

私は numpy の初心者であり、genfromtxt を使用して CSV を numpy 配列に読み込むのに苦労しています。

例として使用している Web 上の CSV ファイルを見つけました。フロートとストリングの混合物です。ここにあります: http://pastebin.com/fMdRjRMv

私はpylab経由でnumpyを使用しています(ipython -pylab経由でUbuntuシステムで初期化しています)。numpy.version.version は 1.3.0 です。

これが私がすることです:

例 #1:

data = genfromtxt("fMdRjRMv.txt", delimiter=',', dtype=None)

data.shape

(374, 15)


data[10,10] ## Take a look at an example element

'30'

type(data[10,10])

type 'numpy.string_'

CSV ファイルには誤った引用符がないため、数値が文字列であると見なされる理由がわかりません。なぜこれが事実なのか誰にも分かりますか?

例 #2 (最初の行をスキップ):

data = genfromtxt("fMdRjRMv.txt", delimiter=',', dtype=None, skiprows=1)

データ.形状

(373,)

これをすべて 1 次元配列に読み込まない理由を知っている人はいますか?

本当にありがとう!

4

1 に答える 1

8

例 #1 では、問題は、1 つの列のすべての値が同じデータ型を共有する必要があることです。データ ファイルの最初の行には列名があるため、これはすべての列のデータ型が文字列であることを意味します。

最初の行をスキップする例 #2 は正しい考えです。ただし、1.3.0 はかなり古いバージョンであることに注意してください (私は 1.6.1 を持っています)。新しいバージョンskiprowsでは非推奨であり、skip_header代わりに使用する必要があります。

配列の形状が(373,)構造化配列である理由は ( http://docs.scipy.org/doc/numpy/user/basics.rec.htmlを参照)、numpy が不均一なデータを表すために使用するものです。 . したがってdata[10]、テーブルの行全体が得られます。などの名前でデータ列にアクセスすることもできますdata['f10']。列の名前は で確認できますdata.dtype.names。データ ファイルの最初の行で定義されている元の列名を使用することもできます。

 data = genfromtxt("fMdRjRMv.txt", dtype=None, delimiter=',', names=True)

のような列にアクセスできますdata['Age']

于 2011-10-02T16:39:12.717 に答える