Python - ValueError:float()的无效文字:

时间:2013-01-31 05:12:33

标签: python linux csv numpy

我有一个csv文件,我正在尝试计算其中每个列的平均值。

#!/usr/bin/python

with open('/home/rnish/Desktop/lbm-reference.dat.ref-2013-01-30-13-00-15big.csv', "rU") as f:
    columns = f.readline().strip().split(' ')
    numRows = 0
    sums = [0] * len(columns)

    for line in f:
        values = line.split(" ")
        print values
        for i in xrange(len(values)):
           sums[i] += float(values[i])
        numRows += 1

#    for index, summedRowValue in enumerate(sums):
#        print columns[index], 1.0 * summedRowValue / numRows

我得到的错误是:

  File "excel.py", line 15, in <module>
    sums[i] += float(values[i])
ValueError: invalid literal for float(): 0,536880742,8861743,0,4184866,4448905

这是print values的输出结果:

['0,256352728,10070198,5079543,5024472,34764\n']
['0,352618127,10102320,4987654,3082111,1902909\n']
['0,505838297,9977968,423278,4709666,5041639\n']
['0,506598469,10083489,0,5032146,5054715\n']
['0,536869414,7229488,39934,4322290,3607046\n']

这就是csv文件的外观:

0,256641418,10669052,4803710,4759922,0
0,484517531,9889830,1457230,4084777,4959529
0,506902273,9673699,0,5281012,5293376

有人可以解释一下并帮助我理解这个问题:

我在阅读几篇帖子后假设这是由于新的行字符。我是对的吗?

2 个答案:

答案 0 :(得分:3)

您正在空格中分割.csv文件 - 但您的字符串中没有空格。尝试用逗号分割:

    columns = f.readline().strip().split(',')

答案 1 :(得分:1)

使用numpy

import numpy as np

a = np.loadtxt("data.csv", delimiter=",")
mean = np.mean(a, axis=0)
print(mean)

使用csv module

import csv
import sys

it = csv.reader(sys.stdin, quoting=csv.QUOTE_NONNUMERIC)
avg = next(it, [])
count = 1
for count, row in enumerate(it, start=2):
     for i, value in enumerate(row):
          avg[i] += value
avg = [a/count for a in avg]
print(avg)

Output

[0.0, 431655407.0, 9492692.6, 2106081.8, 4434137.0, 3128214.6]