在python中将大型数据集转换为浮点型
我是Python 3和Python的新手。我的任务是编写一个函数,读取一个数据集(plentity.data),然后将该数据转换为float在python中将大型数据集转换为浮点型,python,python-3.x,loops,Python,Python 3.x,Loops,我是Python 3和Python的新手。我的任务是编写一个函数,读取一个数据集(plentity.data),然后将该数据转换为float data=[] inFile = open('plenty.data','r') for line in inFile.readlines(): data.append(line) data(float(line)) 我已经成功地编写了读取数据集的代码,但我真的很难将其转换为float data=[] inFile = open('plenty.
data=[]
inFile = open('plenty.data','r')
for line in inFile.readlines():
data.append(line)
data(float(line))
我已经成功地编写了读取数据集的代码,但我真的很难将其转换为float
data=[]
inFile = open('plenty.data','r')
for line in inFile.readlines():
data.append(line)
data(float(line))
这是目前我用来转换为float的方法,但当我运行它时,会收到一条错误消息,上面说
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'
ValueError回溯(最近一次调用)
在()
3对于infle.readlines()中的行:
4.追加数据(行)
---->5数据(浮动(线))
6.
ValueError:无法将字符串转换为浮点:“0.0.0.0.0.0.0.0.0.0 0.0.0 0.0”
0.0\n'
我被告知要使用循环,但我仍在为如何做到这一点而挣扎
任何帮助都将不胜感激 不能只将一长串数字转换为浮点数。您的异常显示该行由多个数字组成:
'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()])
但是,让服务器为您执行此操作更有效,它可以在读取数据和拆分行时将数据转换为浮点:
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_非数字
配置使读卡器输出浮点数
如果您不需要随机访问数据(如果您可以逐行处理数字,并且不需要按索引引用单个行),那么您就不必将整个文件读入内存。只需在读卡器上循环,并根据需要处理每一行:
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
data(float(line))
尝试将列表对象用作函数。不要追加行,而是追加float(line)
:data.append(float(line))
。啊,你有空格分隔的数字。您希望在此使用csv
模块,并让它负责为每个列创建浮动。最好使用numpy
来完成此任务。QUOTE\u非数字
让读者这样做?哇,谈谈命名不好的常数。开发者在想什么?@martineau:这是一个对称的东西。quote
配置主要是一个writer
方言配置选项(其中任何不是数字的内容,特别是浮点数,都放在输出的引号中)。在这里,它被用作该选项的反义词。啊,现在它有意义了。如果你意识到,逻辑(和面)中的对称是美丽的。不过,有一点是不对称的。编写器(毫不奇怪)同时考虑整数和浮点数,不引用它们,但读者只将任何未引用的内容转换为浮点数。不管怎样,我还是有点惊讶地发现,读者能够返回所有字符串以外的序列,尽管这种方式非常有限。@martineau:我希望看到这种方式更具可配置性(a la Pandasread_csv()
可能,但可能没有高级),我通常不太需要这个选项。但它比必须自己映射行更快(就目前而言,I/O操作可以认为是快速的)且更简单。