Как заменить запятую на точку в pandas
Перейти к содержимому

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

  • автор:

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

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

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

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

Convert commas decimal separators to dots within a Dataframe

I am importing a CSV file like the one below, using pandas.read_csv :

Example of CSV file:

The problem is that when I later on in my code try to use these values I get this error: TypeError: can’t multiply sequence by non-int of type ‘float’

The error is because the number I’m trying to use is not written with a dot ( . ) as a decimal separator but a comma( , ). After manually changing the commas to a dots my program works.

I can’t change the format of my input, and thus have to replace the commas in my DataFrame in order for my code to work, and I want python to do this without the need of doing it manually. Do you have any suggestions?

5 Answers 5

pandas.read_csv has a decimal parameter for this: doc

stellasia's user avatar

I think the earlier mentioned answer of including decimal=»,» in pandas read_csv is the preferred option.

However, I found it is incompatible with the Python parsing engine. e.g. when using skiprow= , read_csv will fall back to this engine and thus you can’t use skiprow= and decimal= in the same read_csv statement as far as I know. Also, I haven’t been able to actually get the decimal= statement to work (probably due to me though)

The long way round I used to achieving the same result is with list comprehensions, .replace and .astype . The major downside to this method is that it needs to be done one column at a time:

Now, column a will have float type cells. Column b still contains strings.

Note that the .replace used here is not pandas’ but rather Python’s built-in version. Pandas’ version requires the string to be an exact match or a regex.

Python Pandas: правильный способ изменить десятичную запятую на десятичную точку в Pandas Dataframe? [Дубликат]

Так как sdk 23 или выше вводит новый способ запроса разрешений, поэтому, если вы запуститесь в Marshmallow, он покажет эту ошибку.

Решение: установите targetSdkVersion ниже 23 в файл манифеста, такой как thisroid: targetSdkVersion = «21»

3 ответа

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

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

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *