Нахождение минимального значения в списке с помощью лямбды - PullRequest
0 голосов
/ 16 июня 2019

У меня есть код, который сохраняет мои данные в файл .txt, затем я использую код (ниже), который ищет самое низкое значение в определенном столбце и сохраняет его в другом файле с другой информацией, прикрепленной к этой строке. Вывод выглядит так, и я расскажу о двух случаях, когда я получил эту же ошибку.

Мой код:

    rows = []
    with open("S:/Workflow/Testresults/measurements.txt", mode='r') as infile:
        reader = csv.reader(infile, delimiter=" ")
        for row in reader:  # each row is a list
            rows.append(row)
    minimus = min(rows, key=lambda x: float(x[1]))
    dipolemoment = (float(minimus[3]) * ((2*6.532) * pow(10, 22) / (1.06 * pow(10,-10) * 4.5 * cos(radians(int(minimus[0])))))) * pow(10,-24)

Ошибка:

Traceback (most recent call last):
  File "S:/Workflow/NewestDecomp/Decomposition13062019.py", line 198, in <module>
    minimus = min(rows, key=lambda x: float(x[1]))
  File "S:/Workflow/NewestDecomp/Decomposition13062019.py", line 198, in <lambda>
    minimus = min(rows, key=lambda x: float(x[1]))
ValueError: could not convert string to float:

First

Выход:

30 295.5746708644463
31 287.2952638886134
32 278.71824911973124
33 269.851301784405
34 260.7054651033139
35 251.29568775900006

В этом случае скрипт работает, но если у меня в первом ряду число превышает 100, я получаю сообщение об ошибке.

Второй

Выход:

30 239.69282467921443 0.4676188470692765 
31 233.26309732696078 0.4676188470692765
32 226.55527422794984 0.4676188470692765
33 219.5700525651719 0.4676188470692765
34 212.31067697178025 0.4676188470692765
35 204.78347831156816 0.4676188470692765
36 196.99928467633828 0.4676188470692765

Здесь, если я пытаюсь использовать код, я получаю эту ошибку. Неважно, есть ли у меня число выше, чем 100 в первом столбце.

Есть мысли?

1 Ответ

0 голосов
/ 16 июня 2019

Я думаю, что вы, вероятно, видите проблему с форматом текстового файла, который вы прочитали.

Когда я запускаю фрагмент кода

rows = []
with open("test.txt", mode='r') as infile:
    reader = csv.reader(infile, delimiter=" ")
    for row in reader:  # each row is a list
        rows.append(row)
    minimus = min(rows, key=lambda x: float(x[1]))

с вашим первым примером в test.txt, но измененный, чтобы в первом столбце было целое число больше 100, я не воспроизводил ошибку,Точно так же, когда я запускаю этот фрагмент кода со вторым примером дословно, я не воспроизводю вашу ошибку.

Ошибка, которую вы видите

ValueError: could not convert string to float:

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

ValueError: could not convert string to float: notafloat

Примером, когда столбец два будет пустой строкой, является наличие нескольких пробелов междупервый и второй столбец подряд.В этом случае вы можете использовать skipinitialspace=True как параметр в csv.reader, который пропустит любые дополнительные пробелы после разделителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...