Python - ValueError:浮点数无效:

3

我有一个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个回答

3
您正在以空格分割 .cvs 文件,但您的字符串中没有空格。请尝试改为以逗号分割:
    columns = f.readline().strip().split(',')

columns = f.readline().strip().split(',') numRows = 0 sums = [0] * len(columns)目前代码是这样的,但它不能正常工作。 - rnish
刚刚意识到 - 在 values = line.split(" ") 这一行中,你还需要在逗号处拆分该行... 将其更改为 values = line.split(",")。这样好吗? - Floris
谢谢!我没听清楚。 - rnish
它忽略了csv文件的第一行,我不知道为什么。 - rnish
它忽略了第一行,因为你明确地读取了第一行(以获取“columns”列表),但是之后没有再使用它。尝试用sums = columns替换初始化sums的代码,然后你就可以了。 - Blckknght

1
使用 numpy
import numpy as np

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

使用 csv 模块
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)

输出

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

平均值 = np.mean(a, axis=0)它会输出以下数值:[ 0.00000000e+00 5.49352277e+08 1.06912389e+07 7.33264049e+06 6.79808023e+06 6.80590208e+06]。将其转换为浮点数值会带来额外的开销。 - rnish
@rnish: 检查你的输入数据。我得到了:[0.00000000e+00 4.31655407e+08 9.49269260e+06 2.10608180e+06 4.43413700e+06 3.12821460e+06],它与CSV结果完全一致。 - jfs
我需要找到一种将ndarray数据从科学计数法转换为浮点数的方法。:-)。我给出的数据只是csv文件的一小部分。 - rnish
@rnish:数据是相同的。您可以按照自己的喜好打印它。要将数组保存为csv格式:np.savetxt(sys.stdout, (mean,), fmt="%.1f", delimiter=", "),您可以使用文件名或任何文件对象代替sys.stdout - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接