2016-06-29 10 views
4

私は、Argparseパーサーを設定して、シェルからユーザー入力を読み込みます。入力は、文字列と数字を含むpandas DataFrameからデータを抽出するために使用されます。私は自動的にArgparse .add_argument()type=引数をそれぞれの列のデータ型と一致するように設定したいと思います。argparseでnumpyデータ型を使用する

for c in inputdata.columns: 
     inputname= c 
     inputtype= np.dtype(inputdata[c]) 
     parser.add_argument("--"+inputname, type=inputtype) 

しかし、これは動作しません:

私の考えは入力データがデータフレームである。このようなArgparse引数を設定することでしたPythonはValueError: dtype('int64') is not callable上げます。これは、Numpyのファイルタイプの権利を与えるものではないためです。例:入力タイプをfloatに設定すると、計画どおりに進む。手動でtype=np.int64と入力すると、Argparseにも問題はありません。私はそれが上に示したループで、すなわちint64型オブジェクト、私のデータフレーム内のファイルタイプを受け入れるように取得できますか

  • ?私はいくつかのオプションを試しましたhere同様に、 dtype.typeしかし何も働かなかった。

  • これはちょっとできませんか?私はそれがnumpyのデータ型と罰金だ上で言ったように、内蔵型や関数

共通の型引数

の値として直接使用することができますがのみことをArgparse docs状態明示的に入力した場合。

ありがとうございました!

+1

この文脈では、 'callable'は通常、文字列を(あなたの入力から)取り出し、それを他のものに変換する関数です。そして、入力文字列が正しく形成されていないというエラーが発生します。 'np.int64( '123')'が動作します。 'np.dtype( 'int64')( '123')'はしません。 – hpaulj

答えて

5

使用

inputtype = np.dtype(inputdata[c]).type 

または

inputtype = inputdata[c].dtype.type 

.type属性は呼び出し可能であり、そのDTYPEの新しいインスタンスを作成するために使用することができます。

+0

は魅力的に機能します。ありがとうございます。 – patrick

関連する問題