2013-02-28 12 views
8

未知数の列に値がない可能性があるCSVに保存されたデータを処理しようとしています(最大約30)。私はgenfromtxtfilling_missing引数を使用して、これらの欠損値を '0'に設定しようとしています。私はfilling_values=0を期待するnumpyのユーザーガイドからNumPy genfromtxt:filling_missingを正しく使用しています

plain [(1.0, 2.0, 3.0, 4.0) (5.0, nan, 7.0, 8.0)] 
filling_values=0 [(1.0, 2.0, 3.0, 4.0) (5.0, nan, 7.0, 8.0)] 
filling_values={1:0} [(1.0, 2.0, 3.0, 4.0) (5.0, 0.0, 7.0, 8.0)] 
filling_values={0:0} [(1.0, 2.0, 3.0, 4.0) (5.0, nan, 7.0, 8.0)] 

Traceback (most recent call last): 
    File "C:\Users\tolivo.EE\Documents\active\eng\python\sizer\testGenfromtxt.py", line 20, in <module> 
    a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={None:0}) 
    File "C:\Users\tolivo.EE\AppData\Roaming\Python\Python27\site-packages\numpy\lib\npyio.py", line 1451, in genfromtxt 
    filling_values[key] = val 
TypeError: list indices must be integers, not NoneType 

と:ここではActiveState社のActivePythonに勝つ7

import numpy 

text = "a,b,c,d\n1,2,3,4\n5,,7,8" 
a = numpy.genfromtxt('test.txt',delimiter=',',names=True) 
b = open('test.txt','w') 
b.write(text) 
b.close() 
a = numpy.genfromtxt('test.txt',delimiter=',',names=True) 
print "plain",a 

a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values=0) 
print "filling_values=0",a 

a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={1:0}) 
print "filling_values={1:0}",a 

a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={0:0}) 
print "filling_values={0:0}",a 

a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={None:0}) 
print "filling_values={None:0}",a 

し、その結果に2.7 32ビットを実行しているnumpyの1.6.2のための最小限の実施例でありますfilling_values={None:0}は動作するが、動作しないため、それぞれエラーが発生する。あなたは正しい列(filling_values={1:0})を指定するとうまくいくが、ユーザが選択する前に未知数のカラムが大量にあるので、ユーザガイドのヒントのように塗りつぶした値を自動的に設定する方法を探している。

私はおそらく、事前に列を数え、その間にfilling_valuesの値として渡すべきdictを作成することができますが、より良い方法はありますか?

+0

バグレポートが存在する:http://projects.scipy.org/numpy/ticket/1722 – Holger

+0

おかげで、私はgithubのバグトラッカーに問題にコメントを追加しました。 https://github.com/numpy/numpy/issues/2317 – Thav

+1

開発版のnumpyでバグが修正されました:https://github.com/numpy/numpy/pull/4968 –

答えて

8

ドキュメントからは分かりませんが、filling_values="0"が動作します。

In [19]: !cat test.txt 
a,b,c,d 
1,2,3,4 
5,,7,8 
9,10,,12 

In [20]: a = numpy.genfromtxt('test.txt', delimiter=',', names=True, filling_values="0") 

In [21]: print a 
[(1.0, 2.0, 3.0, 4.0) (5.0, 0.0, 7.0, 8.0) (9.0, 10.0, 0.0, 12.0)] 
+0

それは私のために働きます!私はmissing_values引数に関する別のSOの質問を見ていました。引用符はそこでは役に立たないと言われていましたので、ここで試してみることはありませんでした。 – Thav

関連する問題