Как преобразовать список строк в число с плавающей точкой? - PullRequest
0 голосов
/ 01 ноября 2019

Я импортирую числа из CSV-файла, который выглядит как прикрепленное изображение: Просмотр CSV-файла

Однако эти числа импортируются в виде строки, а не с плавающей точкой, поэтому мне нужноперерабатывать. Я пытался использовать этот метод, но он просто говорит, что не может конвертировать.

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 голосов
/ 01 ноября 2019

, пожалуйста, попробуйте ниже:

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)

Демо

, если это не работает, пожалуйста, добавьте ваш образец csv файла в данную демонстрационную ссылку

0 голосов
/ 01 ноября 2019

Если вы хотите преобразовать оба столбца в плавающее, чтобы вы получили список, который выглядит следующим образом:

[
    [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)
0 голосов
/ 01 ноября 2019

Это довольно запутанно, как указано выше, вы нигде не объявили line, но если вы хотите преобразовать строку '1.09805600' в число с плавающей точкой, просто назовите ее как число с плавающей точкой.

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