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