Как перевести str в float python
Перейти к содержимому

Как перевести str в float python

  • автор:

Как перевести str в int или float?

Хочу посчитать в Pandas кое-какие значения. Загружаю файл, а там все значения отображаются как object. Попытался перевести с помощью:

df = df.col.astype('float') 

И далее ошибка:

ValueError: could not convert string to float: '4097575,00000' 

А когда пытаюсь перевести в int также выдает ошибку значения:

ValueError: invalid literal for int() with base 10: '4097575,00000' 

Как перевести str в float python

В операциях с данными могут применяться значения различных типов. Например, складываются число типа int и число типа float :

a = 2 # число int b = 2.5 # число float c = a + b print(c) # 4.5

В данном случае никакой ошибки не будет. Однако Python не всегда может автоматически производить операции, в которых участвуют данные разных типов. Рассмотрим, какие в данном случае действуют правила.

Неявные преобразования

Оба числа в арифметических операциях должны представлять один и тот же тип. Если же два операнда операции представляют разные типы данных, то Python пытается автоматически выполнить преобразования к одному из типов в соответствии со следующми правилами:

  • Если один из операндов операции представляет комплексное число (тип complex ), то другой операнд также преобразуется к типу complex.
  • Иначе, если один из операндов представляет тип float , то второй операнд также преобразуется к типу float. Собственно так и произошло в примере выше, где значение переменной a было преобразовано в тип float
  • Иначе, оба операнда должны представлять тип int , и в этом случае преобазование не требуется

Явные преобразования

Но в некоторых случаях возникает необходимость вручную выполнить преобразование типов. Например, пусть у нас будет следующий код:

a = "2" b = 3 c = a + b

Мы ожидаем, что «2» + 3 будет равно 5. Однако этот код сгенерирует исключение, так как первое число на самом деле представляет строку. И мы увидим при выполнении кода что-то наподобие:

Traceback (most recent call last): File "/Users/eugene/PycharmProjects/HelloApp/main.py", line 3, in c = a + b TypeError: can only concatenate str (not "int") to str

Для преобразования типов Python предоставляет ряд встроенных функций:

  • int() : преобразует значение в целое число
  • float() : преобразует значение в число с плавающей точкой
  • str() : преобразует значение в строку
int

Так, в предыдущем примере преобазуем строку в число с помощью функции int():

a = "2" b = 3 c = int(a) + b print(c) # 5

Примеры преобразований с помощью int() :

a = int(15) # a = 15 b = int(3.7) # b = 3 c = int("4") # c = 4 e = int(False) # e = 0 f = int(True) # f = 1

Однако если значение не может быть преобразовано, то функция int выдаст ошибку ValueError: invalid literal for int() with base 10 :

b = int("a1c") # Ошибка c = int("4.7") # Ошибка
float

Аналогичным образом действует функция float() , которая преобразует в число с плавающей точкой.

a = "2.7" b = 3 c = float(a) + b print(c) # 5.7

Примеры преобразований с помощью float() :

a = float(15) # a = 15.0 b = float(3.7) # b = 3.7 c = float("4.7") # c = 4.7 d = float("5") # d = 5.0 e = float(False) # e = 0.0 f = float(True) # f = 1.0

Но опять же не все значения могут автоматически преобразованы в float. Так, в следующем случае Python сгенерирует ошибку:

d = float("abc") # Ошибка
str

Функция str() преобразует значение в строку:

a = str(False) # a = "False" b = str(True) # b = "True" c = str(5) # c = "5" d = str(5.7) # d = "5.7"

Функция str() может быть актуальна, например, при добавлении к строке значения другого типа. Например, в следующем случае мы получим ошибку:

age = 22 message = "Age: " + age # Ошибка print(message)

Если число складывается с число, то это стандартная операция сложения чисел. Если строка складывается со строкой, то это операция объединения строк. Но каким образом выполнить операцию сложения по отношение к строке и числу, Python не знает. И если мы в данном случае мы хотим выполнить операцию объединения строк, то число можно привести к строке с помощью функции str() :

age = 22 message = "Age: " + str(age) # Age: 22 print(message)

Преобразование числа из строки в тип int и float

Python не позволит сложить строку и число, даже если строка выглядит как число, то есть содержит только цифры:

>>> '50' + 1 # TypeError: cannot concatenate ‘str’ and ‘int’ objects 

В архитектуре языка оператор ‘+’ может означать как операцию сложения, так и операцию конкатенации, вследствие чего выбор типа преобразования становится неочевидным. Поэтому интерпретатор воспринимает такую инструкцию как ошибочную. В этом случае нужно использовать инструменты преобразования, чтобы можно было интерпретировать строку как число или наоборот.

Преобразование строковой версии числа в int или float .

  • Преобразование строки в тип int ;
  • Преобразование строки в тип float ;
  • Преобразование списка строк в список чисел.

Преобразование строки в тип int .

# преобразование строки в число >>> num = '50' >>> if num.isdigit(): . int('50') # 50 >>> float('1.5') # 1.5 # преобразование числа в строку >>> str(50) # '50' 

Функции int и float преобразует строку в число, функция str преобразует число в строковое представление. В Python нельзя смешивать строковые и числовые типы в таких операторах, как ‘+’ , но можно вручную выполнить необходимые преобразования перед выполнением.

Преобразование строки в тип float .

>>> x = '50' >>> y = 1 >>> z = '1.5' # Операция сложения >>> int(x) + y + float(z) # 52.5 # Операция конкатенации >>> x + str(y) + z # '5011.5' # Преобразование строки с записью вещественного # числа в число с плавающей точкой >>> text = '5.79E-10' >>> float(text) # 5.79e-10 

Преобразование списка строк в список чисел.

Для преобразования списка строк с числами в список целых чисел можно ввести проверку перед преобразованием на то, что строка состоит только из десятичных чисел str.isdigit() .

>>> str_list = ['8.3', '11', 'девять', '1', '5', '3', '9', . 'пять', '15', '13', '7', '13.9', 'число'] >>> num_list = [] >>> for i in str_list: . if i.isdigit(): . num_list.append(int(i)) >>> num_list.sort() >>> num_list # [1, 3, 5, 7, 9, 11, 13, 15] 

Для преобразования списка строк с числами включая десятичные c разделением их по типам, необходимо перед преобразованием в тип float проверять строку на вхождение точки ‘.’ .

>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', . '.пять', '15', '13', '7', '13.9', 'число'] >>> def str_to_num(str): . if '.' in str and str.replace('.', '').isdigit(): . return float(str) . elif str.isdigit(): . return int(str) . >>> num_list = [] >>> for i in str_list: . n = str_to_num(i) . if n is not None: . num_list.append(str_to_num(i)) >>> num_list # [8.3, 11, 1, 5, 3, 9, 15, 13, 7, 13.9] 

Для преобразования всех чисел в тип float , можно просто заменять точку в строке с числом и проверять получившуюся строку на десятичное число.

>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', . '.пять', '15', '13', '7', '13.9', 'число'] >>> def is_num(str): . if str.replace('.', '').isdigit(): . return True . >>> num_list = [] >>> for i in str_list: . if is_num(i): . num_list.append(float(i)) . >>> num_list.sort() >>> num_list # [1.0, 3.0, 5.0, 7.0, 8.3, 9.0, 11.0, 13.0, 13.9, 15.0] 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Преобразование строки в число
  • Строку в список, кортеж или множество символов
  • Одинарные, двойные и тройные кавычки в строке Python
  • Вывод специальных символов в строке Python «как есть»
  • Объединение и повторение строк
  • Индексирование строк
  • Использование срезов строк
  • Cрез строки Python от заданного символа/знака до конца строки
  • Создание макета для печати базовыми методами строк
  • Способы форматирования текстовых строк
  • Подсчет повторений слов в тексте, деление строки на список слов
  • Удаление слова из строки Python по фрагменту или шаблону
  • Удаление пунктуации из строки
  • Деление строки по заглавным буквам
  • Создание отчетов и писем по шаблонам

ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ В PYTHON

С помощью функции complex() удобно формировать комплексные числа, указывая через запятую два аргумента: действительную часть и мнимую часть.

a = complex(3.2, 1.5) print(a) 
(3.2+1.5j) 

Смешанная арифметика

Python поддерживает смешанную арифметику в выражениях, состоящих из чисел разных типов. При этом целочисленный тип (int) при необходимости расширяется до дробного (float), а дробный — до комплексного (complex). То же самое происходит при сравнении чисел разного типа.

Системы счисления

Для преобразования чисел в двоичную, восьмиричную и шестнадцатиричную систему служат функции bin(), oct() и hex(). Эти функции возвращают строковые представления чисел, что необходимо учитывать при работе с ними.

a = hex(38) print(a) 
0x26 

Преобразовать строковое представление недесятичного числа в десятичную систему можно с помощью функции int(), указав вторым аргументом основание системы счисления (от 2 до 36 включительно).

a = '0x26' b = int(a, base=16) print(b) 

Округление

Для округления чисел с плавающей точкой используется функция round(). Функция использует банковское округление (по Гауссу) до ближайшего чётного целого, чтобы избежать серийного накопления погрешности. Например, round(1.5) + round(2.5) будет равен 4. При обычном математическом округлении сумма округленных чисел будет равна 5.

С помощью второго аргумента функции round() можно округлить число до заданного количества знаков после запятой. Если воторой аргумент не задан, то число округляется до целого.

a = round(1.5) print(a) b = round(2.5) print(b) c = round(6.4567, 2) print(c) d = round(4.35, 1) print(d) e = round(4.45, 1) print(e) 
2 2 6.46 4.7 4.5 

Преобразование в строку

Для преобразования в строку используется функция str(). Аргументом функции str() может выступать число, строка, кортеж, список, множество, словарь, логическое значение, None.

Любой объект, преобразованный в строку, становится просто набором символов.

a = 5.3 x = str(a) print(x, type(a), type(x)) 

Преобразование в список

Для преобразования в список используется функция list(). Аргументом функции list() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).

При преобразовании строки в список, мы получаем список, состоящий из символов строки.

Стоит обратить внимание на то, что при преобразовании словаря в список, в списке оказываются только ключи.

b = 'Python' x = list(b) print(x) c = (3, 4) x = list(c) print(x) d = [5, 6] x = list(d) print(x) e = x = list(e) print(x) f = x = list(f) print(x) 
['P', 'y', 't', 'h', 'o', 'n'] [3, 4] [5, 6] [8, 7] [1, 2] 

Преобразование в кортеж

Для преобразования в кортеж используется функция tuple(). Аргументом функции tuple() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).

Преобразование в кортеж происходит по тому же принципу, по которому происходит преобразование в список.

Преобразование в множество

Для преобразования в множество используется функция set(). Аргументом функции set() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).

Преобразование в множество происходит по тому же принципу, по которому происходит преобразование в список, но следует учитывать, что повторяющиеся элементы в множестве будут представлены только один раз.

a = [5, 6, 5, 6, 7] x = set(a) print(x) 

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

a = 227 x = set(str(a)) print(x) 

Преобразование в словарь

Для преобразования в словарь используется функция dict().

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

f = [[1, 'яблоко'], [2, 'тыква']] x = dict(f) print(x) 

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

Для преобразования в логический тип используется функция bool().

Функция bool() вернет False, если в качестве аргумента выступает пустая строка, нулевое число, None, пустой список, пустой кортеж или пустое множество. Непустая строка, ненулевое число, даже если оно отрицательное, вернут True. Непустое множество, непустой список или непустой кортеж, даже если они содержат один пустой элемент, вернут True.

a = -7 x = bool(a) print(x) b = '' x = bool(b) print(x) c = x = bool(c) print(x) 
True False True 

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

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