Чтобы преобразовать строки в числа с плавающей запятой в DataFrame, используйте метод Pandas to_numeric().
Что такое функция Pandas to_numeric() в Python?
Pandas to_numeric() — это встроенная функция, которая используется в Python для преобразования аргумента в числовой тип. Тип возврата функции по умолчанию — float64 или int64, в зависимости от предоставленного ввода. Чтобы получить значения другого типа данных, нам нужно использовать параметр downcast.
Еще одна вещь, которую следует отметить, это то, что может быть потеря точности, если мы введем слишком большие числа. Это из-за внутреннего ограничения ndarray.
Синтаксис
|
1 |
pandas.to_numeric(arg, errors=’raise’, downcast=None) |
Параметры
Метод to_numeric() имеет три параметра, один из которых является необязательным.
- arg: это ввод, который может быть списком, одномерным массивом или рядом.
- errors: может иметь три значения: «ignore», «raise», «coerce». Значение по умолчанию — «raise». Если это ‘raise’, то неверный синтаксический анализ создаст исключение. Если «coerce», то недопустимый синтаксический анализ будет установлен как NaN. Если «ignore», то неверный синтаксический анализ вернет ввод.
- downcast: по умолчанию его значение равно None. Если значение не None и данные были успешно преобразованы в числовой тип данных downcast, который затем приводит к наименьшему числовому типу данных, возможному в соответствии со значениями, переданными в параметре downcast. Он может иметь значения «integer/signed», «unsigned», «float».
Возвращаемое значение
Метод Pandas to_numeric() возвращает числовые данные, если синтаксический анализ прошел успешно. Следует отметить, что тип возвращаемого значения зависит от ввода.
Возвращает серию, если в качестве входных данных передается серия, а во всех остальных случаях возвращает ndarray.
Примеры программы на pandas.to_numeric()
Напишем программу, показывающую работу pandas.to_numeric().
Пример 1
|
1 2 3 4 |
import pandas as pd data = pd.Series(['1', '2', '3.6', '7.8', '9']) print(pd.to_numeric(data)) |
Выход:
|
1 2 3 4 5 6 |
0 1.0 1 2.0 2 3.6 3 7.8 4 9.0 dtype: float64 |
Здесь мы видим, что когда мы передали ряд, он преобразовался в числовой, а также упомянул dtype, равный float64. Чтобы изменить его на определенный тип данных, нам нужно передать понижающий параметр с подходящими аргументами.
Пример 2
Напишем программу, показывающую работу функции to_numeric(), передав значение, подписанное в параметре downcast.
См. следующий код.
|
1 2 3 4 |
import pandas as pd data = pd.Series(['1', '2', '3.6', '7.8', '9', '-3', '-56', '-60']) print(pd.to_numeric(data, downcast='signed')) |
Выход:
|
1 2 3 4 5 6 7 8 9 |
0 1.0 1 2.0 2 3.6 3 7.8 4 9.0 5 -3.0 6 -56.0 7 -60.0 dtype: float64 |
Здесь мы видим, что мы установили для параметра downcast значение sign и получили желаемый результат.
Использование error=’raise’
Это вызовет ошибку, если она ее найдет. См. следующий код.
|
1 2 3 4 5 |
import pandas as pd ser = pd.Series(['Eleven', 11, 21, 19]) num = pd.to_numeric(ser, errors='raise') print(num) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Traceback(most recent call last): File "pandas/_libs/lib.pyx", line 1926, in pandas._libs.lib.maybe_convert_numeric ValueError: Unable to parse string "Eleven" During handling of the above exception, another exception occurred: Traceback(most recent call last): File "app.py", line 4, in <module> num = pd.to_numeric(ser, errors='raise') File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/tools/numeric.py", line 149, in to_numeric values = lib.maybe_convert_numeric( File "pandas/_libs/lib.pyx", line 1963, in pandas._libs.lib.maybe_convert_numeric ValueError: Unable to parse string "Eleven" at position 0 |
Мы получаем ValueError: Unable to parse string «Eleven».
Если вы передадите errors=’ignore’, ошибка не будет выдана. Давайте посмотрим на это в следующем сеансе.
errors=’ignore’
Будут игнорироваться все нечисловые значения.
|
1 2 3 4 5 |
import pandas as pd ser = pd.Series(['Eleven', 11, 21, 19]) num = pd.to_numeric(ser, errors='ignore') print(num) |
В этом примере мы создали серию с одной строкой и другими числовыми значениями.
Итак, если вы добавите error=’ignore’, то не получите никакой ошибки, потому что вы явно указываете, что игнорируйте все ошибки при преобразовании в числовые значения.
Смотрите вывод.
|
1 2 3 4 5 |
0 Eleven 1 11 2 21 3 19 dtype: object |
Мы не получили никаких ошибок из-за аргумента error=ignore.
Заключение

Функция Pandas to_numeric() преобразует аргумент в числовой тип. Мы видели варианты функции to_numeric() с передачей разных аргументов.
