15

次の例のように、多くの欠落値があるファイルからデータを読み取りたいと思います。

1,2,3,4,5
6,,,7,8
,,9,10,11

私はnumpy.loadtxt関数を使用しています:

data = numpy.loadtxt('test.data', delimiter=',')

問題は、欠落している値がloadtxtを壊すことです(2つ以上の連続した区切り文字のために間違いなく「ValueError:文字列をfloatに変換できませんでした:」が表示されます)。

loadtxtまたは別の関数を使用してこれを自動的に行う方法はありますか、それとも弾丸を噛んで各行を手動で解析する必要がありますか?

4

3 に答える 3

15

私はおそらくgenfromtxtを使用します:

>>> from numpy import genfromtxt
>>> genfromtxt("missing1.dat", delimiter=",")
array([[  1.,   2.,   3.,   4.,   5.],
       [  6.,  nan,  nan,   7.,   8.],
       [ nan,  nan,   9.,  10.,  11.]])

次に、nansを使って何でもします(何かに変更したり、代わりにマスクを使用したりします)。これのいくつかはインラインで行うことができます。

>>> genfromtxt("missing1.dat", delimiter=",", filling_values=99)
array([[  1.,   2.,   3.,   4.,   5.],
       [  6.,  99.,  99.,   7.,   8.],
       [ 99.,  99.,   9.,  10.,  11.]])
于 2012-05-21T14:04:41.173 に答える
1

これは、関数が同じタイプのすべてのセルを含むnumpy配列を返すことを期待しているためです。

文字列と数値が混在するテーブルが必要な場合は、代わりに構造化配列に読み込む必要があります。またskip_header=1、最初の行をスキップするように追加することもできます。つまり、次のようになります。

np.genfromtxt('upeak_names.txt', delimiter="\t", dtype="S10,S10,f4,S10,f4,S10,f4", 
names=["id", "name", "Distance", "name2", "Distance2", "name3", "Distance3], skip_header=1)

参照:

于 2018-12-19T14:46:47.977 に答える
-1

このため、私のテストによると、文字セルは検出されず、数値のみが検出されることに注意してください。したがって、文字列と数値を含むテーブルがある場合は、別の方法が必要です。

私の例:

upeak_names.txt:
id  name    Distance    name2   Distance2   name3   Distance3
upeak-3 NOC2L   -161    KLHL17  -1135   NOC2L   -162

>>>table= genfromtxt('upeak_names.txt', delimiter="\t")
>>>comb_table[2,]
>>>array([   nan,    nan,  -161.,    nan, -1135.,    nan,  -162.])
于 2016-06-12T13:06:39.850 に答える