возникли проблемы с преобразованием строки в плавающую и добавлением из списка (python)

#python #string #floating-point

Вопрос:

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

Это список:

temp_gallons = [‘404,443.60 ‘, ‘367,223.12 ‘, ‘388,369.08 ‘, ‘352,472.56 ‘, ‘386,618.76 ‘, ‘333,929.64 ‘, ‘326,868.52 ‘, ‘257,663.56 ‘, ‘0.00 ‘, ‘0.00 ‘, ‘0.00 ‘, ‘0.00 ‘, ‘2,817,589 ‘]

Это итерация цикла for для добавления их при временном преобразовании в float:

 Q1_Gallons = 0.0
for i in range(0,2):
  Q1_Gallons = Q1_Gallons   float(temp_gallons[i])
 

Я решил, что причина в том, что в конце каждого числа есть пробел. Поэтому я попытался удалить значения, используя итерацию цикла for:

 for i in temp_gallons:
  i.strip(" ")
 

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

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

Комментарии:

1. Строки должны содержать только «.» и только один раз. Ваш содержит «,»

2. Пробел не проблема, вы можете иметь столько пробелов, сколько захотите, в начале и в конце строки: float(' t 404443.60 n ') равно 404443.6 .

Ответ №1:

Причина не в конечных пробелах, а , в промежутках между ними.

Вы должны удалить , из строк, а затем преобразовать в float .

Вот как это сделать.

 temp_gallons = ['404,443.60 ', '367,223.12 ', '388,369.08 ', '352,472.56 ', '386,618.76 ', '333,929.64 ', '326,868.52 ', '257,663.56 ', '0.00 ', '0.00 ', '0.00 ', '0.00 ', '2,817,589 ']

temp_gallons = [float(x.replace(',', '')) for x in temp_gallons]
print(temp_gallons)
 
 [404443.6, 367223.12, 388369.08, 352472.56, 386618.76, 333929.64, 326868.52, 257663.56, 0.0, 0.0, 0.0, 0.0, 2817589.0]
 

Комментарии:

1. Спасибо!! это сработало. Пришлось немного изменить его для моего другого списка кортежей, но алгоритм был идеальным, еще раз спасибо.

Ответ №2:

Во-первых, вы получаете ошибки, потому что в строке есть запятая. Float не может преобразовать запятую в плавающее число. Во-вторых, пространство-это не проблема. Предположим, у вас есть две строки S1 = ‘123,00 ‘(есть пробел), S2 = ‘12,324324’ (есть запятая) . Вы можете использовать float() для преобразования S1 в float, но не можете использовать float() для S2, потому что там есть»,». Сначала вы должны удалить его. Проверьте код:

 temp_gallons = ['404,443.60 ', '367,223.12 ', '388,369.08 ', '352,472.56 ', '386,618.76 ',
                '333,929.64 ', '326,868.52 ', '257,663.56 ', '0.00 ', '0.00 ', '0.00 ', '0.00 ', '2,817,589 ']

temp_gallons_float = []

for i in temp_gallons:
    i = i.replace(',', '')
    i = float(i)
    temp_gallons_float.append(i)

print(temp_gallons_float)


# for adding

Q1_Gallons = 0.0

for i in temp_gallons_float:
    Q1_Gallons  = i

print(Q1_Gallons)