2014-01-07 2 views
1

.csv 파일을 배열로로드하려고합니다. 그러나 파일은 다음과 유사합니다.배열을 읽는 중에 문자열을 무시합니다.

"myfilename",0.034353453,-1.234556,-3,45671234 
,1.43567896, -1.45322124, 9.543422 
................................. 
................................. 

선도 문자열을 건너 뛰려고합니다. 나는 지금까지 첫 번째 행을 멀리하고있다.

a = np.genfromtxt(file,delimiter=',',skiprows=1) 

그러나 처음에는 처리 할 때 문자열을 무시하고 배열을 읽는 방법이 있는지 궁금합니다. 이 파일의 시작 부분에 바로 첫 번째 줄 이후

+0

이유뿐만 아니라'csv' 모듈을 사용 말한다? –

+0

파일에 단 하나의 문자열이 있습니까? 아니면 전체에 임의로 분산 된 문자열이 있습니까? – mgilson

+0

@GamesBrainiac -'csv'를 사용하면 모든 문자열을 직접 숫자로 변환하고, 원하지 않는 것들 (문자열이 아닌 숫자 인 문자열)을 수동으로 필터링 한 다음 전체를 변환해야합니다 numpy 배열로. 'genfromtext'는'csv' 파일을 다루기위한 것이지만, (AFAIK)는 "문자열"을 가진 파일이 아닙니다. – mgilson

답변

2

당신이 단지에서 줄을 건너 뛰는 것을 피한다 loadtxt(..., usecols=(1,2,3), ...)을 사용할 수 파일 시작?

는 usecols 인수는 열 추출 (및 숫자입니다)하는 loadtxt

# Put data into file (in shell, just me copying the sample) 
cat >> /tmp/data.csv 
"myfilename",0.034353453,-1.234556,-3,45671234 
,1.43567896, -1.45322124, 9.543422 

# In IPython 
In [1]: import numpy as np 

In [2]: a = np.loadtxt('/tmp/data.csv', usecols=(1,2,3), delimiter=',') 

In [3]: a 
Out[3]: 
array([[ 0.03435345, -1.234556 , -3.  ], 
     [ 1.43567896, -1.45322124, 9.543422 ]]) 
+0

그는'np.genfromtxt ('temp.csv', delimiter = ',', usecols = (1,2,3))'로도 할 수 있습니다. –

0

, 당신은 지금 그 문자열을 제거하는 도우미 생성기를 작성할 수

def helper(filename): 
    with open(filename) as fin: 
     # this could get more robust ... e.g. by doing typechecking if necessary. 
     line = next(fin).split(',') 
     yield ','.join(line[1:]) 
     for line in fin: 
      yield line 

arr = np.genfromtxt(helper('myfile.csv'), delimiter=',') 
+0

매력처럼 작동했습니다. 감사합니다. –

+0

나는 두 번째 줄에 나노를 얻는다. 첫 번째 행에 더 많은 요소가 있기 때문에 분명합니다. 그러나 첫 번째 행에서 여분의 요소를 없애면 genfromtxt는 execution 행 2가 3 대신 4 개의 열을 가져옵니다. 왜? –

+0

@AdaXu - 확실하지 않습니다. 나는 당신이 가지고있는 문제를 재현 할 수 있어야한다고 생각하지만, 내가 보여준 데이터로 그 일을 할 수 있는지는 모른다. – mgilson

관련 문제