未知数の列に値がない可能性があるCSVに保存されたデータを処理しようとしています(最大約30)。私はgenfromtxt
のfilling_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を作成することができますが、より良い方法はありますか?
バグレポートが存在する:http://projects.scipy.org/numpy/ticket/1722 – Holger
おかげで、私はgithubのバグトラッカーに問題にコメントを追加しました。 https://github.com/numpy/numpy/issues/2317 – Thav
開発版のnumpyでバグが修正されました:https://github.com/numpy/numpy/pull/4968 –