2014-03-27 4 views
1

다른 데이터 형식의 .csv 파일이 있는데 같은 열의 값으로 작동하려고합니다..csv 파일의 같은 열에 값을 사용하는 방법

내 .csv 파일이 같은 것입니다 :

"int","float","string", more stuff... 

"7","1.378","rider 7",... 
"9","1.979","rider 9" 
"4","2.520","rider 4" 
"2","4.711","rider 2" 
More rows 

내가 2 열 (만 사람의 값을 빼지 싶습니다, 나는 약을 걱정하지 않는다 다른 사람). 나는 접근과 가치를 하나씩 보여줄 수 있지만, 문제는 내가 초보자이기 때문에 인덱스가 어떻게 가치를 다루고 나중에 작동하도록 할 수 있는지를 잘 이해하지 못한다.

코드 내가 사용하는 그와 하나

with open('file.csv','rb') as input: 
csvin = csv.reader(input, delimiter=',') 

for row in csvin: 
    data = float(row[1]) 
    print "value -> %f " % data 

다음 내가

1.378 
1.979 
2.520 
4.711 
etc 

를 참조하려는 것입니다하지만 내 목표는 이전

각 값을 substracting의 결과를 얻을 것입니다
1.979 - 1.378 
2.520 - 1.979 
4.711 - 2.520 
x - 4.711 
etc 

도움이 될만한 데 감사드립니다.

답변

3

이 작업을 수행하는 방법은 여러 가지가 있습니다 : 마지막 값의

  • 킵 트랙 및
  • 가게를 목록에있는 모든 값을 빼고 빼기 원소 별
  • 저장 모든 numpy 배열로 이동 된 벡터를 뺍니다.

어떤 것이 가장 좋을까요?

구체적인 예를 들어

,의 일부 데이터 시작하자 :

csvin = [[1, 6], 
     [2, 14], 
     [3, 1.1], 
     [4, 3.14]] 

우리는 우리가 볼 코드를 실행하는 경우 :

value -> 6.000000 
value -> 14.000000 
value -> 1.100000 
value -> 3.140000 

그래서 우리는 데이터가 두 번째 열에서 값을 받고 알고 있습니다.

해결 방법 1 :

difference -> 8.000000 
difference -> -12.900000 
difference -> 2.040000 

해결 방법 2 : 마지막 요소

last = None 
for row in csvin: 
    data = float(row[1]) 
    if last is not None: 
     print "difference -> %f" % (data - last) 
    last = data 

출력 추적을 계속 사용 파이썬 목록 및 요소

all_data = [float(row[1]) for row in csvin] 
print "differences: ", [next - curr for next, curr in zip(all_data[1:], all_data[: -1])] 
에 의해 요소를 빼기

오우 tput :

differences: [8.0, -12.9, 2.04] 

참고 : 여기서 모든 값 목록과 차이점 목록을 목록 작성으로 구성합니다.

해결 방법 3 : NumPy와

import numpy 
all_data = numpy.array([float(row[1]) for row in csvin]) 
print "differences: ", all_data[1:] - all_data[: -1] 

출력 :

differences: [ 8. -12.9 2.04] 

참고 : 벡터 수학을 사용하기 때문에 약간 솔루션이보다 더 깨끗합니다. 결과는 솔루션 2의 목록과는 달리 숫자가 적은 배열이지만 두 요소의 개별 요소는 [] 표기법을 사용하여 액세스 할 수 있습니다. 다음 스크립트는 나를 위해 작동

+0

all_data [1 :] 첫 번째 요소를 제외한 데이터이며, all_data [: - 1] 마지막 요소를 제외한 데이터이기 때문에, 그들은 둘 다 같은 길이를 가지고 있지만, 하나씩 서로 상쇄됩니다. – ramcdougal

+0

좋은 답변입니다! 모든 다른 옵션을 사랑하십시오. :) 이제 OP는 더 많은 수치 처리 옵션을 위해 NumPy를 탐색하거나 더 나은 성능을위한 'zip'예제를 생성하는 방법을 파악할 수 있습니다. –

1

꽤 가깝습니다.

with open('file.csv', 'rb') as infile: 
    csvin = csv.reader(infile, delimiter=',') 

prev_val = 0 
for row in csvin: 
    data = float(row[1]) - prev_val 
    print 'value -> %f ' % data 
    prev_val = data 
0

...

prev_val = 0.0 
with open('file.csv', 'r') as infile: 
    csvin = csv.reader(infile, delimiter=',') 
    for row in csvin: 
     data = float(row[1]) - prev_val 
     print('delta is', data) 
     prev_val = float(row[1]) 
관련 문제