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

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

  • автор:

Как преобразовать числа с плавающей запятой в целые числа в Pandas

Вы можете использовать следующий синтаксис для преобразования столбца в pandas DataFrame из числа с плавающей запятой в целое число:

df['float_column'] = df['float_column'].astype (int) 

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1: преобразование одного столбца из числа с плавающей запятой в целое число

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view data types for each column df.dtypes player object points float64 assists float64 dtype: object 

Мы видим, что столбцы очков и помощи имеют тип данных float.

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

#convert 'points' column to integer df['points'] = df['points'].astype (int) #view data types of each column df.dtypes player object points int32 assists float64 dtype: object 

Мы видим, что столбец точек теперь является целым числом, а все остальные столбцы остались без изменений.

Пример 2. Преобразование нескольких столбцов в целое число

В следующем коде показано, как преобразовать несколько столбцов в DataFrame из числа с плавающей запятой в целое число:

import pandas as pd #create DataFrame df = pd.DataFrame() #convert 'points' and 'assists' columns to integer df[['points', 'assists']] = df[['points', 'assists']].astype (int) #view data types for each column df.dtypes player object points int32 assists int32 dtype: object 

Мы видим, что столбцы баллов и передач были преобразованы из чисел с плавающей запятой в целые числа.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные преобразования в Python:

Как перевести из float в int 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)

Перевод float в int

Имеется фрейм a*b . Фрейм состоит их float , object , int . Есть объекты NaN . Под «а» в том числе идет нумерация. Соответственно «b» определяют наименования колонок. Каким конструктом перевести ВСЕ float переменные фрейма в int , при этом НЕ удаляя ячеек ?

Отслеживать
51.6k 201 201 золотой знак 65 65 серебряных знаков 247 247 бронзовых знаков
задан 4 авг 2019 в 15:01
user234183 user234183
df = df.astype(int) ?
4 авг 2019 в 15:05

Поправил описание. В фрейме есть также object. Дает : ValueError: invalid literal for int() with base 10: ‘некоторый текст’

– user234183
4 авг 2019 в 15:21
df = df.astype(int, errors=’ignore’)
4 авг 2019 в 15:36
Уточните пожалуйста для NaN включений.
– user234183
4 авг 2019 в 16:11

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Два способа. Разница в колонке №4.

import itertools as itr import pandas as pd df = pd.DataFrame(itr.combinations([1.1, 2.2, 3.3, 4.4, 5.5, 'a', 'b'], 6)) print(df.astype(int, errors='ignore')) print() print(df.applymap(lambda x: int(x) if isinstance(x, float) else x)) 0 1 2 3 4 5 0 1 2 3 4 5.5 a 1 1 2 3 4 5.5 b 2 1 2 3 4 a b 3 1 2 3 5 a b 4 1 2 4 5 a b 5 1 3 4 5 a b 6 2 3 4 5 a b 0 1 2 3 4 5 0 1 2 3 4 5 a 1 1 2 3 4 5 b 2 1 2 3 4 a b 3 1 2 3 5 a b 4 1 2 4 5 a b 5 1 3 4 5 a b 6 2 3 4 5 a b 

NaN имеет тип float64 . Чтобы получить int можно пойти двумя путями.

  1. Конвертировать столбец в int64 .
  2. Конвертировать NaN в число типа int .
import itertools as itr import pandas as pd df = pd.DataFrame(itr.combinations([2.2, 3.3, pd.np.NaN, 4.4, 5.5, 'a', 'b'], 6)) print(df.applymap( lambda x: int(x) if not pd.isna(x) and isinstance(x, float) else x ).astype()) print() print(df.fillna(0).applymap(lambda x: int(x) if isinstance(x, float) else x)) 0 1 2 3 4 5 0 2 3 NaN 4 5 a 1 2 3 NaN 4 5 b 2 2 3 NaN 4 a b 3 2 3 NaN 5 a b 4 2 3 4 5 a b 5 2 NaN 4 5 a b 6 3 NaN 4 5 a b 0 1 2 3 4 5 0 2 3 0 4 5 a 1 2 3 0 4 5 b 2 2 3 0 4 a b 3 2 3 0 5 a b 4 2 3 4 5 a b 5 2 0 4 5 a b 6 3 0 4 5 a b 

ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ В 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 не будет опубликован. Обязательные поля помечены *