2011-10-06 2 views
-1

플로트하는 문자열로 변환합니다. 컨테스트를 목록 (목록의 목록)으로 가져오고 내용은 문자열로 제공됩니다. 내가하고 싶은 일은 가변 개수의 행이 될 수있는 목록을 반복하고 인덱스 2 문자열을 부동 소수점으로 변환하는 것입니다. 다음 코드를 실행하지만 목록을 인쇄하면 모든 것이 여전히 문자열입니다.내가 사과 있도록이 매우 간단한데 경우, 파이썬에 새로운 오전

import csv 

def main(): 
    benchmark = list(csv.reader(open('test.csv', 'r'))) 

    for i in range((len(benchmark))): 
     benchmark[i][2] = float(benchmark[i][2]) 

어떤 도움을 주시면 감사하겠습니다.

감사합니다.

+0

그 코드는 저에게 효과적입니다. – interjay

+0

이 코드는 정확하므로 입력 데이터와 값이 여전히 문자열인지 확인하는 방법을 포함하여 완전한 예제를 게시해야합니다. – interjay

답변

2

이미 반복 가능하므로 csv.reader를 목록으로 변환 할 필요는 없습니다. 다음과 같이 할 수 있습니다.

benchmark=[] 
with open('test.csv','r') as inp: 
    csvin=csv.reader(inp) 
    for row in csvin: 
     benchmark.append(row[:1] + [float(row[1])] + row[2:]) 
+0

이렇게하면 각 열의 두 번째 문자가 부동 소수점으로 변환됩니다. 원하는 것은 아닐 수도 있습니다. 당신이 그것을 고치더라도 원래의 코드는 나에게 분명해 보입니다. – interjay

+0

@interjay 네 말이 맞아, 고마워! 거기에서 조금 지나치게지도/람다와 함께 있었다. –

0

이것은 아마도 작동하지만 테스트 데이터 없이는 테스트 할 수 없습니다.

>>> benchmark = [[1, 2, 3, 4], [5, 6, 7, 8]] 
>>> [[float(col) if i == 2 else col for i, col in enumerate(row)] for row in benchmark] 
[[1, 2, 3.0, 4], [5, 6, 7.0, 8]] 
+1

이것은 내가 찾던 바로 그 것이다. 감사합니다. – donopj2

관련 문제