2016-12-20 2 views
0

Мой сценарий набирает строку, когда он не должен, я получаюPython, ValueError: не удалось преобразовать строку плавать:

ValueError: could not convert string to float: for line list_col.append(float(row[c].strip('"'))) in the code below

with open(fileTwoName) as f: 

    reader = csv.reader(f, delimiter=",") 
    fileTwoColumnNames = next(reader) 
    output_column .extend(fileTwoColumnNames[2:-1]) 
    number_of_columns = len(fileTwoColumnNames)-2 


    for c in range(2,number_of_columns+2): 
     list_col = [] 
     f.seek(1) 
     next(reader) 
     for row in reader: 
      list_col.append(float(row[c].strip('"'))) 

     list_col_name_wise = [] 
     for k in range(0, len(number_eng)): 
      list_col_name_wise.append(sum(list_col[start_row[k] - 1:start_row[k] - 1 + 1- total_case [k]])) 
     data.append(list_col_name_wise) 

я тестировал его, добавив

if list_col == str: 
    list_col.append(float(row[c].strip('"'))) ` 

все выводится нормально, но мне нужен мой список data для вывода в виде поплавка. Есть ли способ для меня учитывать как str, так и float?

+4

Я подозреваю, что ваши данные неверны: добавьте строку 'print [c] .strip ('' ')' перед нарушающей строкой и последним результатом перед ней ошибки. – TemporalWolf

+2

Прочитать ошибку: невозможно преобразовать строку в float. 'row [c] .strip ('" "')' - это строка, которая должна содержать только float и, возможно, пробелы, иначе 'float (...)' не удастся с ошибкой, которую вы видите, –

ответ

1

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

for row in reader: 
    try: 
     list_col.append(float(row[c].strip('"'))) 
    except ValueError: 
     # Empty string 
     if row[c].strip('" ') == '': 
      list_col.append(0.0) 
      # or 
      pass # ignore 
     else: 
      raise 

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

+0

I не вижу ничего, кроме пробела в моей консоли Ipython, однако он выводит некоторые данные как float. Что я могу сделать, чтобы исправить эту проблему, я очень новичок в python – MiguelA

+0

@MiguelA можете ли вы добавить вывод из этого вопроса на свой вопрос? – TemporalWolf

+0

К сожалению, мой вывод идет в CSV-файл, который очень большой. Печатные данные на консоли после добавления проверки ошибок - это просто пустое пространство, которое продолжается некоторое время, пока он не остановится. – MiguelA

0

вашими комментариями выглядит, как вы получаете что-то по этому поводу

>>> float(" ") 

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    float(" ") 
ValueError: could not convert string to float: 
>>> 

и, очевидно, вы не можете поплавок из строки, которые не содержат какой-либо номер, чтобы начать с.

У вас есть 2 варианта, игнорировать это значение и перейти к следующему, или использовать значение по умолчанию, как 0 или какого-либо другого удобного значения, когда это произойдет

Чтобы сделать любое из этого очень просто с примеркой, за исключением

игнорировать это сделать

for row in reader: 
    try: 
     list_col.append(float(row[c].strip('"'))) 
    except ValueError: 
     print("Error with row",c,":",row[c]) 
     pass 

или использовать значение по умолчанию, вместо того, чтобы сделать

for row in reader: 
    try: 
     list_col.append(float(row[c].strip('"'))) 
    except ValueError: 
     print("Error with row",c,":",row[c]) 
     list_col.append(0.0) 

(отпечатки не являются обязательными)

+0

Спасибо, это решение работает. – MiguelA

Смежные вопросы