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:
вместо того, чтобы сделать так:
Получается костыль, который не радует глаз + генерирется куча мусора. Как задать принудительно разделителем точку?