2016-06-01 2 views
2

현재 약 350 행과 50 열의 csv 파일이 있으며 그 중 4 열에 액세스하려고합니다. genfromtxt을 사용하면이 작업을 수행 할 수 있습니다. 그러나 해당 열이 있으면 기존 열 (예 : newcol=abs(col1-col2))을 기반으로 새 열을 추가하고 싶습니다. 그러나 이렇게하면 오류가 발생합니다 : too many indices for array.numpy 배열 조작

import numpy as np 
thedata = np.genfromtxt(
    'match_roughgraphs.csv', 
    skip_header=0, 
    skip_footer=0, 
    delimiter=',', 
    usecols=(3,4,29,30), 
    names=['hubblera','hubbledec','sloanra','sloandec']) 

for row in thedata: 
    print(row) 

b=np.empty(350,1) 
b=np.absolute(thedata[:,0]-thedata[:,1]) #returns too many indices error 

print(thedata[0,0]) #also returns too many indices error 

print(thedata[0]) #prints out first row 

두 줄 위의 마지막을 바탕으로, 나는 시도 테스트, 나는, 모든 데이터가 하나 개의 컬럼에 저장되도록 genfromtxt() CSV 파일을로드 있으리라 믿고있어 분리 : 여기

내 코드입니다 구분 기호 쉼표 대신 문자열 쉼표로 구분합니다. 이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?

답변

2

코드가 작동하지 않는 이유는 numpy.genfromtxt가 1D 배열의 tupples 또는보다 구체적으로 구조화 된 ndarray를 반환한다고 생각합니다. 이것을 읽으십시오. numpy.genfromtxt produces array of what looks like tuples, not a 2D array—why? 인수를 수정하거나 배열로 변환하여 thedata을 2D 배열로 만들 수 있습니다. name 인수를 사용하면 구조화 된 ndarray를 반환하고이 인수를 제거하면 2D 배열이 반환됩니다. 여기에 열 이름 것처럼에는 2 차원 배열이 thedata[0][0]

+0

일을 시도하지 있기 때문에 그냥이 오류를 반환도

b=np.absolute(thedata['hubblera']-thedata['hubbledec']) 

thedata[0,0] 할 수있는 나는 것을보고,하지만 대답은 문제가 ndarrays이었다이다 2D가되기 위해서는 동 질적이어야한다. 내 것은 이미 동 질적입니다. 모든 데이터 포인트는 '

+0

name 인자를 사용할 때 구조화 된 ndarray를 반환하고 이름 인자를 제거하면 2 차원 배열을 반환합니다 – Eular

+0

오, 너 '맞아! 감사합니다. –