2016-11-17 20 views
0

エクスポートしたpandasデータフレームがnumpy.arrayオブジェクトになりました。numpyの配列をndarray

subset = array[:4,:] 
array([[ 2.  , 12.  , 33.33333333, 2.  , 
     33.33333333, 12.  ], 
     [ 2.  , 2.  , 33.33333333, 2.  , 
     33.33333333, 2.  ], 
     [ 2.8  , 8.  , 45.83333333, 2.75  , 
     46.66666667, 13.  ], 
     [ 3.11320755, 75.  , 56.  , 3.24  , 
     52.83018868, 33.  ]]) 
print subset.dtype 
dtype('float64') 

私は、これは私がndarrayに変換する必要があることを意味し、特定のタイプに列の値を変換し、同様にカラム名を設定することでした。ここで

は私dtypesです:

[('PERCENT_A_NEW', '<f8'), ('JoinField', '<i4'), ('NULL_COUNT_B', '<f8'), 
('PERCENT_COMP_B', '<f8'), ('RANKING_A', '<f8'), ('RANKING_B', '<f8'), 
('NULL_COUNT_B', '<f8')] 

私は配列を変換するために行くとき、私が取得:

ValueError: new type not compatible with array. 

私は配列に変換することができますので、あなたが特定の値に各列をキャストするにはどうすればよいですndarrayに?あなたは既にndarrayを持って

おかげ

+0

を使用しています。 float64' .... – Chr

+2

['.astype'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.astype.html)メソッドを使用して、パンダ自体で行うことができます。なぜ不必要に配列に変換するのですか? – Kartik

+0

@Kartik私が使用しているプログラムはnumpy配列を使用しています。 –

答えて

2

。あなたが求めているのは、この複合dtypeを持つ構造化配列です。まず、pandasがあなたのためにできるかどうかを見てください。それが失敗すると、tolistとリストの理解で何かをすることができるかもしれません。

In [84]: dt=[('PERCENT_A_NEW', '<f8'), ('JoinField', '<i4'), ('NULL_COUNT_B', '< 
    ...: f8'), 
    ...: ('PERCENT_COMP_B', '<f8'), ('RANKING_A', '<f8'), ('RANKING_B', '<f8'), 
    ...: ('NULL_COUNT_B', '<f8')] 
In [85]: subset=np.array([[ 2.  , 12.  , 33.33333333, 2.  
    ...: , 
    ...:   33.33333333, 12.  ], 
    ...:  [ 2.  , 2.  , 33.33333333, 2.  , 
    ...:   33.33333333, 2.  ], 
    ...:  [ 2.8  , 8.  , 45.83333333, 2.75  , 
    ...:   46.66666667, 13.  ], 
    ...:  [ 3.11320755, 75.  , 56.  , 3.24  , 
    ...:   52.83018868, 33.  ]]) 
In [86]: subset 
Out[86]: 
array([[ 2.  , 12.  , 33.33333333, 2.  , 
     33.33333333, 12.  ], 
     [ 2.  , 2.  , 33.33333333, 2.  , 
     33.33333333, 2.  ], 
     [ 2.8  , 8.  , 45.83333333, 2.75  , 
     46.66666667, 13.  ], 
     [ 3.11320755, 75.  , 56.  , 3.24  , 
     52.83018868, 33.  ]]) 

dtで配列を作成します。構造化された配列の入力はタプルのリストである必要があります - 私はあなたが `np.int16`、` np.float32`、 `NPのような正しいDTYPEを使用する必要がありますtolistとリスト内包表記

In [87]: np.array([tuple(row) for row in subset.tolist()],dtype=dt) 
.... 
ValueError: field 'NULL_COUNT_B' occurs more than once 
In [88]: subset.shape 
Out[88]: (4, 6) 
In [89]: dt 
Out[89]: 
[('PERCENT_A_NEW', '<f8'), 
('JoinField', '<i4'), 
('NULL_COUNT_B', '<f8'), 
('PERCENT_COMP_B', '<f8'), 
('RANKING_A', '<f8'), 
('RANKING_B', '<f8'), 
('NULL_COUNT_B', '<f8')] 
In [90]: dt=[('PERCENT_A_NEW', '<f8'), ('JoinField', '<i4'), ('NULL_COUNT_B', '< 
    ...: f8'), 
    ...: ('PERCENT_COMP_B', '<f8'), ('RANKING_A', '<f8'), ('RANKING_B', '<f8')] 
In [91]: np.array([tuple(row) for row in subset.tolist()],dtype=dt) 
Out[91]: 
array([(2.0, 12, 33.33333333, 2.0, 33.33333333, 12.0), 
     (2.0, 2, 33.33333333, 2.0, 33.33333333, 2.0), 
     (2.8, 8, 45.83333333, 2.75, 46.66666667, 13.0), 
     (3.11320755, 75, 56.0, 3.24, 52.83018868, 33.0)], 
     dtype=[('PERCENT_A_NEW', '<f8'), ('JoinField', '<i4'), ('NULL_COUNT_B', '<f8'), ('PERCENT_COMP_B', '<f8'), ('RANKING_A', '<f8'), ('RANKING_B', '<f8')]) 
関連する問題