Преобразование больших наборов данных для плавания в Python - PullRequest
0 голосов
/ 12 октября 2018

Я новичок в Python 3 и Python в целом.Мне поставили задачу написать функцию, которая читает набор данных (множество.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 голосов
/ 12 октября 2018

Вы не можете просто конвертировать длинную строку чисел в числа с плавающей точкой.Ваше исключение показывает, что строка состоит из более чем одного числа:

'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 как функцию или класс (a вызываемая ).Однако объекты списка не могут быть вызваны.

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

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

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

import csv

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

Конфигурация quoting=csv.QUOTE_NONNUMERIC для считывателя CSV позволяет читателю выводить числа с плавающей запятой.

Если вам не нужен произвольный доступ к данным (если вы можете обрабатывать числа построчно и не нужно ссылаться на отдельные строки по индексу), вам не нужно читать весь файл вобъем памяти.Просто зациклите читатель и обработайте каждую строку по мере необходимости:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...