2016-07-12 3 views
0
import csv 
from decimal import * 

def mean(data_set): 
    return Decimal(sum(data_set))/len(data_set) 

def variance(data_set): 
    mean_res = mean(data_set) 
    differences = [] 
    squared_res = [] 
    for elem in data_set: 
     differences.append(elem - mean_res) 
    for elem in differences: 
     squared_res.append(elem ** 2) 
    return mean(squared_res) 

def standard_deviation(data_set): 
    variance_res = variance(data_set) 
    return variance_res ** Decimal('0.5') 

if __name__ == "__main__": 
    with open("dog_data.csv", "r") as csv_file: 
     csv_reader = csv.reader(csv_file) 
     height_data = [] 
     for row in csv_reader: 
      height_data.append(int(row[1])) 
     print "Mean: {}".format(mean(height_data)) 
     print "Variance: {}".format(variance(height_data)) 
     print "Standard Deviation:{}".format(standard_deviation(height_data)) 

여기 ValueError가 표시됩니다. 10 진수의 int()에 대한 리터럴이 잘못되었습니다. '높이 (mm)'.. 이것은 무엇을 의미 하는가? 이 오류를 어떻게 해결할 수 있습니까?ValueError : 밑이 10 인 int()에 대한 리터럴이 올바르지 않습니다.

+0

이것은 셀에 숫자를 나타내는 문자열이 아니라 문자열 'Height (mm)'가 들어 있음을 의미합니다. CSV 파일을 다시 확인하십시오. 건너 뛸 필요가있는 헤더 행이있는 것 같습니다. – TigerhawkT3

+0

int ("Height (mm)")를하면이 정확한 에러가 발생합니다. 질문을하기 전에 가장 먼저해야 할 일은 루프에서 사용 된 값에 대한 가정을 확인하는 것입니다. 간단한'print (row)'는 문제에 대해 많은 것을 밝힐 것이다. –

답변

0

사용 height_data[:-11] 또는 height_data[:-12] (당신은 당신 사이 space 번호와 Height (mm)이있는 경우

if __name__ == "__main__": 
    with open("dog_data.csv", "r") as csv_file: 
     csv_reader = csv.reader(csv_file) 
     height_data = [] 
     for row in csv_reader: 
      height_data.append(int(row[1]))[:-12] # depends on you want to through away how many characters 
     print "Mean: {}".format(mean(height_data)) 
     print "Variance: {}".format(variance(height_data)) 
     print "Standard Deviation:{}".format(standard_deviation(height_data)) 

업데이트 :

이 데이터

Dog Height(mm) 
Sammi 600 
Doyle 470 
Margo 170 
Cookie 430 
Dandriff 300 
을 CSV 당신의 것입니다 가정 우리 모두 몇 가지 문제와 생활

저장이 너무 짧은, pandas를 사용

import pandas as pd 
df = pd.read_clipboard() 

df 

Out[49]: 
     Dog Height(mm) 
0  Sammi   600 
1  Doyle   470 
2  Margo   170 
3 Cookie   430 
4 Dandriff   300 

df['Height(mm)'].mean() 
Out[50]: 394.0 

df['Height(mm)'].std() 
Out[51]: 164.7118696390761 
+0

작동하지 않습니다. 다음과 같은 오류가 throw됩니다. 추적 (가장 최근 호출 마지막) : 파일 "D : \ Intro to python \ Week_5_Videos \ question_3.py"파일 2733 줄의 인쇄 "평균 :십진수 반환 (합계 (data_set))/len (data_set) 파일 "D : \ Intro to python \ Week_5_Videos \ question_3.py" C : \ Python27 \ lib \ decimal.py ", 줄 1321, __truediv__ 반환 컨텍스트 ._raise_error (DivisionUndefined, '0/0') 파일"C : \ Python27 \ lib \ decimal.py "3873 줄 _raise_error 오류 발생 (설명) decimal.InvalidOperation : 0/0 –

+0

@SiddharthaNReddyMorramreddy, show m 원시 데이터 EA 조각 및 오류 메시지 – MaThMaX

+0

개 높이 (mm) 삼미 600 도일 470 마르고 170 쿠키 430 Dandriff 300 오류 : ValueError를 (INT 대한 잘못된 문자)와 자료 10 : '높이 (mm)' –

1

내가 당신의 문제는 당신이 단어를 포함하는 헤더 (첫 번째 줄)를 읽어 볼 것을 생각하고, 당신이 int로서 구문 분석하려고합니다.

은 첫 번째 행을 건너 뛸 루프 전에

next(csv_reader, None) 

를 추가하려고합니다.

으로 단순히 인쇄 사용 다음에, "내가 어떻게 그 오류를 해결 않습니다"오류를 생산 라인 이전

print row[1] 

오른쪽.

+0

내 코드에는 아무 것도 작동하지 않습니다. :( –

+0

그러면 csv 파일을 게시하면 도움이됩니다 ...... –

관련 문제