0

私の質問は基本的に、この前の質問の「Q2」で尋ねられた (そして回答されていない) ものです。

文字列の列と整数の列を持つ構造化配列があります。dict を使用して文字列を整数に置き換えますが、その列の型は変更されていないため、整数は文字列として記録されます。列の dtype を整数に変更できますが、各文字列の整数値ではなく、すべての文字列が 0 に変換されます。dtype 変換中に整数値が失われないように列を変更するにはどうすればよいですか?

わかりやすい例を作成しました:

dat = np.array([('1', 3392),('2', 4159),('1', 1093),('1', 9836)], dtype=[('code', 'U24'),('id', 'i2')])
dat.astype(dtype=[('code', 'i4'), ('id', 'i2')])

しかし、私が理解できない理由により、これは実際に機能し、次の結果が得られます。

array([(1, 3392), (2, 4159), (1, 1093), (1, 9836)], 
  dtype=[('code', '<i4'), ('id', '<i2')])

これは私が欲しいものです!代わりに、何らかの理由で、次のような結果が得られます。

array([(0, 3392), (0, 4159), (0, 1093), (0, 9836)], 
  dtype=[('code', '<i4'), ('id', '<i2')])

すべての「コード」値がそのようにゼロになる原因は何ですか?実際には、それが からの期待される結果ではありませんndarray.astypeか? ありがとう。(関連がある場合は、Python 3 を使用しています。)

編集:これは、辞書で処理した後の実際のデータのスナップショットです。

array([('1', 2814), ('1', 1185), ('1', 6836), ('2', 7057), ('1', 5403),...

   ('1', 1642), ('1', 3967), ('2', 7982), ('1', 6139), ('1', 9934),
   ('2', 9932), ('1', 3044), ('1', 2769)], 
  dtype=[('name', '<U24'), ('id', '<i2')])
4

1 に答える 1

0

私の推測では、あなたはこれをやっている:

baddata = numpy.array([('1', 2814), ('1', 1185), ('1', 6836), ('2', 7057), ('1', 5403),
   ('1', 1642), ('1', 3967), ('2', 7982), ('1', 6139), ('1', 9934),
   ('2', 9932), ('1', 3044), ('1', 2769)], 
  dtype=[('name', '<U24'), ('id', '<i2')])

baddata.astype([('code', 'i4')])
#>>> array([(0,), (0,), (0,), (0,), (0,), (0,), (0,), (0,), (0,), (0,), (0,),
#>>>        (0,), (0,)], 
#>>>       dtype=[('code', '<i4')])

これを行うつもりの場合:

baddata = numpy.array([('1', 2814), ('1', 1185), ('1', 6836), ('2', 7057), ('1', 5403),
   ('1', 1642), ('1', 3967), ('2', 7982), ('1', 6139), ('1', 9934),
   ('2', 9932), ('1', 3044), ('1', 2769)], 
  dtype=[('name', '<U24'), ('id', '<i2')])

baddata.astype([('name', 'i4')])
#>>> array([(1,), (1,), (1,), (2,), (1,), (1,), (1,), (2,), (1,), (1,), (2,),
#>>>        (1,), (1,)], 
#>>>       dtype=[('name', '<i4')])

名前に注意してください

于 2013-09-26T00:21:12.750 に答える