2015-01-09 2 views
0

데이터 세트가 Npts 포인트와 관련되어 있습니다. 해당 데이터 중 일부는 색상과 같은 스칼라 값이며 일부 데이터는 3D 위치와 같은 다차원입니다. 나는이 데이터를 pandas 데이터 구조에 묶으려고 노력하고 있으며 어떻게하려고하는지에 따라 다양한 오류 메시지를받습니다. 여기 다른 차원의 배열에 대한 열이있는 팬더 DataFrame

일부 모의 데이터의 :

df_colors = pandas.DataFrame({'colors':colors}) 

을하지만 위치 정보하지 않습니다 :

Npts=100 
pos = np.random.uniform(0, 250, Npts*3).reshape(Npts, 3) 
colors = np.random.uniform(-1, 1, Npts) 

입력으로 사전을 사용하여 색상 데이터는 혼자 잘 데이터 프레임들로 번들

df_pos = pandas.DataFrame({'pos':pos}) 

이렇게하면 도움이되지 않는 오류 메시지가 반환됩니다.

ValueError: If using all scalar values, you must must pass an index 

는 그리고 내가 정말하고 싶은 위치 모두 함께 색상 정보 번들입니다 :

df_agg = pandas.DataFrame({'pos':pos, 'colors':colors}) 

는 그러나이 작동하지 않으며, 다음과 동등하게 비밀 오류 반환 :

Exception: Data must be 1-dimensional 

판다 (pandas)와 다차원 데이터를 함께 사용할 수있을뿐만 아니라 혼합 된 크기의 데이터도 포함 할 수 있습니다. 누구든지이 동작에 대한 API를 알고 있습니까?

답변

1

pos의 치수는 (100,3)입니다. 이것을 열로 바꾸려면 차원 배열 (100,)이 필요합니다.

하나의 옵션은 차원의 각각에 대한 개별 열을 생성하는 것입니다 :

posTuple = tuple(map(tuple,pos)) 
df_aggV2 = pandas.DataFrame({'pos':posTuple, 'colors':colors}) 
+0

감사합니다, 앤드류 :

df_agg = pandas.DataFrame({'posX':pos[:,0], 'posY':pos[:,1], 'posZ':pos[:,2], 'colors':colors}) 

또 다른 옵션은 각각 3 튜플로 좌표 캐스트합니다. 이것은 효과가 있지만 왜 그런지 이해하지 못합니다. 제 말은, 당신 말이 맞습니다. 그러나 나는 그것이 모양 변화에 의한 것일 수 있다고 생각하지 않는다. np.shape (pos) = (100, 3) 및 np.shape (posTuple) = (100, 3). 가능하면 데이터 형식을 수위가 낮은 배열로 유지하고 싶습니다. 왜 단순히 데이터를 터플링하는 것입니까 (또는 list : list (map (list, pos))도 마찬가지로 작동합니다) pandas 오류를 해결할 수 있습니까? – aph

+0

좋아, 앤드류, 방금 확인 했어. 솔루션이 작동하는 이유는 유형 변경 때문입니다. pos 대신 list (pos)를 사용하면 문제가 해결됩니다. 나는 아직도 왜 그런지 이해하지 못한다. – aph

+0

dict를 DataFrame의 데이터 입력으로 사용하는 경우 특정 유형의 값만 사용할 수 있습니다. 내 솔루션은 데이터를 수용 가능한 유형으로 변환합니다. "DataFrame은 다양한 종류의 입력을 허용합니다. ... 1D 배열, 목록, 사전 또는 시리즈의 명사". http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe – andrew