将大型数据集转换为在python中浮动

时间:2018-10-12 08:19:45

标签: python python-3.x loops

我一般是Python 3和python的新手。我被设置为编写一个函数,该函数读取一个数据集(plenty.data),然后将该数据转换为浮点数。

我设法编写了代码来读取数据集,但是我真的很努力地将其转换为浮点数。

data=[]
inFile = open('plenty.data','r')
for line in inFile.readlines():
  data.append(line)
  data(float(line))

目前这是我转换为浮点数所需要的,但是当我运行它时,我收到一条错误消息,提示

ValueError                                Traceback (most recent call last)
<ipython-input-6-f32b7e41d5ed> in <module>()
      3 for line in inFile.readlines():
      4     data.append(line)
----> 5     data(float(line))
      6 

ValueError: could not convert string to float: '0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
0.0\n'

有人告诉我要使用循环,但我仍在努力做到这一点。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您不能只将一长串数字转换为浮点数。您的例外情况显示该行包含多个数字:

'0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n'

接下来,即使那行得通,表达式data(float(line))要求Python将data视为函数或类(可调用)。列表对象不能被调用。

您需要行拆分为单独的数字,然后将这些单独的部分转换为浮点数。如果要将文本的每一行附加为单独的列表,可以使用:

data.append([float(part) for part in line.split()])

但是,csv module为您执行此操作效率更高,它可以在读取数据并分割行时将数据转换为浮点数:

import csv

with open('plenty.data', 'r', newline='') as plentydata:
    reader = csv.reader(plentydata, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
    data = list(reader)

CSV阅读器的quoting=csv.QUOTE_NONNUMERIC配置使阅读器输出浮点数。

如果您不需要随机访问数据(如果您可以逐行处理数字并且不需要按索引引用单个行),则不必将整个文件读入记忆。只需遍历阅读器并根据需要处理每一行:

with open('plenty.data', 'r', newline='') as plentydata:
    reader = csv.reader(plentydata, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
    for row in reader:
        # do something with a single row of floats