Как заменить запятую на точку в python

от admin

Python-сообщество

Доброе время!
Есть строки с числами 2095,51 209,56 1885,95. Чтобы преобразовать их во float необходимо запятую изменить на точку. Подскажите пожалуйста оптимальное решение. подозреваю, что через format, но так и не понял.

#2 Ноя. 9, 2017 11:19:06

Преобразование числа с запятой

#3 Ноя. 9, 2017 11:42:32

Преобразование числа с запятой

Как можно оптимизировать код в первых трех строках, даже мне глаз режет

Отредактировано megafox (Ноя. 9, 2017 11:49:35)

#4 Ноя. 9, 2017 11:43:27

Преобразование числа с запятой

Отредактировано FishHook (Ноя. 9, 2017 11:43:43)

#5 Ноя. 9, 2017 13:32:48

Преобразование числа с запятой

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

#6 Ноя. 10, 2017 14:27:48

Преобразование числа с запятой

Очередной привет )
Продолжу здесь, чтобы не спамить.
Задача: есть файл, разделенный на блоки пустой строкой, каждый из них начинается словом “Абонентский номер” и заканчивается “Итого”. Задача пробежаться по строкам и вытащить из них значения, создав второй файл с данными Абонентский номер xxx.
Натолкните на мысль пожалуйста как сделать так, чтобы при нахождении слова Абонентский начиналась обработка блока до слова Итого или пустой строки, происходила запись в файл и начиналась обработка следующего блока.
пример блока:
По услугам в соответствии с тарифным планом “Фирменный Универсальный”
Абонентский номер +7XXXXXXXXXX
Безлимитный внутри сети лайт() 81
Входящие вызовы (Остальные)( мин) 1,15 0
Входящие вызовы (С мобильного)( мин) 84,10 0
Опция Безлимитный интернет( Мб) 167,4
Итого 307,97

#7 Ноя. 10, 2017 15:54:26

Преобразование числа с запятой

Отредактировано vic57 (Ноя. 10, 2017 17:22:26)

#8 Ноя. 10, 2017 17:21:18

Преобразование числа с запятой

я думаю уже блоки сами сможете обработать. как пример блоки отличаются номером:

Преобразование запятых в десятичные разделители в точки в Dataframe

Я импортирую файл CSV, как показано ниже, используя pandas.read_csv :

Пример файла CSV:

Проблема в том, что когда я позже в своем коде пытаюсь использовать эти значения, я получаю эту ошибку: TypeError: can’t multiply sequence by non-int of type ‘float’

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

Я не могу изменить формат ввода и, следовательно, должен заменить запятые в моем DataFrame, чтобы мой код работал, и я хочу, чтобы python делал это без необходимости делать это вручную. У Вас есть какие-то предложения?

3 ответа

pandas.read_csv имеет параметр decimal для этого: doc

То есть попробуйте с:

Я отвечаю на вопрос о том, как заменить десятичную comma на десятичную dot с помощью Python Pandas.

Где мы указываем чтение в десятичном разделителе в виде запятой, а выходной разделитель указывается в виде точки. Так

Где вы видите, что разделитель изменился на точку.

Я думаю, что упомянутый ранее ответ о включении decimal=»,» в панды read_csv является предпочтительным вариантом.

Читать:
Яндекс советник что это

Однако я обнаружил, что это несовместимо с механизмом синтаксического анализа Python. например при использовании skiprow= read_csv прибегнет к этому движку, и поэтому вы не можете использовать skiprow= и decimal= в одном и том же операторе read_csv, насколько мне известно. Кроме того, я не смог заставить оператор decimal= работать (возможно, из-за меня)

Долгий путь, который я использовал для достижения того же результата, — это списки, .replace и .astype . Основным недостатком этого метода является то, что он должен выполняться по одному столбцу за раз:

Теперь столбец А будет иметь ячейки с плавающей точкой. Столбец b все еще содержит строки.

Обратите внимание, что .replace , используемый здесь, это не pandas, а встроенная версия Python. Версия Pandas требует, чтобы строка была точным соответствием или регулярным выражением.

Преобразование запятых в точки в Dataframe

Проблема в том, что когда я позже в моем коде попытаюсь использовать эти значения, я получаю эту ошибку: TypeError: не может умножить последовательность на non-int типа ‘float’.

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

Я не могу изменить формат ввода и, следовательно, должен заменить запятые в моем DataFrame, чтобы мой код работал, и я хочу, чтобы python сделал это без необходимости делать это вручную. У вас есть предложения?

3 ответа

pandas.read_csv имеет параметр decimal для этого: doc

Я думаю, что ранее упомянутый ответ включения decimal=»,» в pandas read_csv является предпочтительным вариантом.

Однако я обнаружил, что он несовместим с механизмом синтаксического анализа Python. например при использовании skiprow= read_csv вернется к этому движку, и поэтому вы не можете использовать skiprow= и decimal= в том же самом read_csv, насколько я знаю. Кроме того, мне не удалось заставить оператор decimal= работать (возможно, из-за меня)

Длинный путь, который я использовал для достижения такого же результата, — это списки, .replace и .astype . Основной недостаток этого метода заключается в том, что он должен выполняться по одному столбцу за раз:

Теперь столбец a будет иметь ячейки типа float. Столбец b все еще содержит строки.

Обратите внимание, что используемый здесь .replace не pandas ‘, а встроенная версия Python. pandas ‘требует, чтобы строка была точным совпадением или регулярным выражением.

[django] Как сделать разделителем точку вместо запятой в float?

В шаблоне использую переменную << float_var >>, джанго всталяет число с разделителем запятая (наверно локализует автоматически по тегам мета, где язык прописан), а мне для использования в JS нужна точка (т.е. вместо 35,7 35.7). Сейчас преобразую с помощью JS:

вместо того, чтобы сделать так:

Получается костыль, который не радует глаз + генерирется куча мусора. Как задать принудительно разделителем точку?

Похожие статьи