2016-11-17 2 views
0

내 보낸 pandas 데이터 프레임은 이제 numpy.array 개체입니다. numpy 배열 to 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에?

감사

+0

을 사용하고 있습니다. float64' .... – Chr

+2

['.astype'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.astype.html) 메소드를 사용하여 팬더 자체에서 수행 할 수 있습니다 . 불필요하게 배열로 변환해야하는 이유는 무엇입니까? – Kartik

+0

@Kartik 나는 numpy 배열을 사용하여 작업하고있는 프로그램입니다. –

답변

2

당신은 이미 ndarray 있습니다. 당신이 찾고있는 것은이 복합 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')])