如何将字符串列表转换为浮点数?

时间:2019-11-01 09:50:39

标签: python string list type-conversion

我正在从看起来像所附图片的csv文件中导入数字: CSV File View

但是,这些数字是作为字符串而不是浮点数导入的,因此我需要进行转换。我试过使用这种方法,但它只是说它不能转换。

import csv
import numpy as np

with open('20191031-0002_09.csv', mode='r') as infile:
    reader = csv.reader(infile)
    next(reader, None)
    next(reader, None)
    next(reader, None)
    y = [columns[1] for columns in reader]

通过对堆栈的研究,我发现这可能行得通:

numbers = []
for x in y:
      numbers.extend([n for n in map(float, line.split(' '))])

但是,我的数组仍然是这样的字符串列表:

['1.09805600', '1.09805600']

我希望它是一个浮点数数组。

希望您能提供帮助。

3 个答案:

答案 0 :(得分:0)

这很令人困惑,如上所述,您尚未在任何地方声明line,但是如果要将字符串'1.09805600'转换为浮点数,只需将其称为浮点数即可。

>>> x = '1.09805600'
>>> float(x)
1.09805600

答案 1 :(得分:0)

请尝试以下操作:

import csv
import numpy as np

with open('20191031-0002_09.csv', mode='r') as infile:
    reader = csv.reader(infile)
    y = [columns[1] for columns in reader]
    print (y)
numbers = []
numbers.extend([n for n in map(float,y)])
print (numbers)

Demo

如果它不起作用,请在给定的演示链接中添加示例csv文件

答案 2 :(得分:0)

如果您想将列都转换为浮点型,以便最终得到一个类似于以下内容的列表:

[
    [0, 1.098056],
    [.000002, 1.098056],
    etc.
]

然后这样做:

import csv

with open('20191031-0002_09.csv', mode='r') as infile:
    reader = csv.reader(infile)
    next(reader, None)
    next(reader, None)
    next(reader, None)
    rows = [[float(columns[0]), float(columns[1])] for columns in reader]

如果您只关心第二列:

    y = [float(columns[1]) for columns in reader]

已编辑以处理具有错误值的列:

import csv, sys

with open('20191031-0002_09.csv', mode='r') as infile:
    reader = csv.reader(infile)
    next(reader, None)
    next(reader, None)
    next(reader, None)
    y = []
    for columns in reader:
        try:
            y.append(float(columns[1]))
        except ValueError:
            print(f"Unable to convert '{columns[1]}'", file=sys.stderr)
            # uncomment out the next line if you want to substitute 0.0
            # y.append(0.0)
相关问题