curso
Tutorial de conversão de tipos de dados do Python
Todo valor em Python tem um tipo de dados. Os tipos de dados são uma classificação de dados que informa ao compilador ou ao interpretador como você deseja usar os dados. O tipo define as operações que podem ser feitas nos dados e a estrutura na qual você deseja que os dados sejam armazenados. Na ciência de dados, muitas vezes você precisará alterar o tipo de seus dados para facilitar o uso e o trabalho com eles.
O Python tem muitos tipos de dados. Você já deve ter visto e trabalhado com alguns deles. Você tem números inteiros e float para lidar com valores numéricos, booleanos (bool
) para lidar com valores verdadeiro/falso e strings para trabalhar com caracteres alfanuméricos. Você pode usar listas, tuplas, dicionários e conjuntos, que são estruturas de dados nas quais é possível armazenar uma coleção de valores. Para saber mais sobre eles, não deixe de conferir o curso Tipos de dados para ciência de dados do DataCamp.
Para executar facilmente todos os exemplos de código deste tutorial, você pode criar gratuitamente uma pasta de trabalho do DataLab que tenha o Python pré-instalado e contenha todos os exemplos de código. Para praticar mais a conversão de tipos em Python, confira este exercício prático do DataCamp.
Conversão de tipo de dados implícita e explícita
A conversão de dados em Python pode ocorrer de duas maneiras: ou você diz ao compilador para converter um tipo de dados em outro tipo explicitamente, ou o compilador entende isso por si só e faz isso para você. No primeiro caso, você está realizando uma conversão explícita de tipo de dados, enquanto que, no segundo, você está realizando uma conversão implícita de tipo de dados.
Conversão de tipo de dados implícita do Python
A conversão implícita ou coerção é quando a conversão do tipo de dados ocorre durante a compilação ou durante o tempo de execução e é tratada diretamente pelo Python para você. Vamos ver um exemplo:
a_int = 1
b_float = 1.0
c_sum = a_int + b_float
print(c_sum)
print(type(c_sum))
2.0
<class 'float'>
Dica: você pode usar a função type() no Python para verificar o tipo de dados de um objeto.
No exemplo, um valor int a_int
foi adicionado a um valor float b_float
, e o resultado foi automaticamente convertido em um valor float c_sum
sem que você precisasse informar ao compilador. Essa é a conversão implícita de dados.
Por que o valor float não foi convertido em inteiro?
Isso se deve a um conceito mais amplo de promoção de tipos na ciência da computação. Simplificando, esse é um mecanismo de defesa do compilador que permite que você realize operações sempre que possível, convertendo seus dados em um supertipo diferente sem perda de informações.
Isso significa que a conversão de float para inteiro não é feita porque, nesse caso, o compilador precisará remover a parte fracionária, o que levará à perda de informações.
Conversão explícita de tipos de dados em Python
A conversão explícita, também conhecida como conversão de tipos , é quando a conversão de tipos de dados ocorre porque você a definiu claramente em seu programa. Basicamente, você força uma expressão a ser de um tipo específico. A forma geral de uma conversão explícita de tipo de dados é a seguinte:
(required_data_type)(expression)
Observação: como você pode imaginar, com a conversão explícita de tipos de dados, há um risco de perda de informações, pois você está forçando uma expressão a ser de um tipo específico.
Com tudo isso em mente, você pode se aprofundar em algumas das conversões de tipos de dados explícitos comumente usados...
Estruturas de dados primitivas e não primitivas
As estruturas de dados primitivas são os blocos de construção para a manipulação de dados e contêm valores puros e simples de dados. O Python tem quatro tipos de variáveis primitivas:
- Inteiros
- Flutuação
- Cordas
- Booleano
As estruturas de dados não primitivas não armazenam apenas um valor, mas uma coleção de valores em vários formatos. Em Python, você tem as seguintes estruturas de dados não primitivas:
- Listas
- Tuplas
- Dicionário
- Conjuntos
Você pode aprender mais sobre elas com o Tutorial de estruturas de dados em Python do DataCamp .
Conversões de estruturas de dados primitivas
Conversões de números inteiros e flutuantes
Os números inteiros e flutuantes são tipos de dados que lidam com números.
Para converter o número inteiro em float, use a função float()
no Python. Da mesma forma, se quiser converter um float em um número inteiro, você pode usar a função int()
.
a_int = 3
b_int = 2
# Explicit type conversion from int to float
c_float_sum = float(a_int + b_int)
print(c_float_sum)
5.0
a_float = 3.3
b_float = 2.0
# Explicit type conversion from float to int
c_int_sum = int(a_float + b_float)
print(c_int_sum)
c_float_sum = a_float + b_float
print(c_float_sum)
5
5.3
Conversão de tipo de dados reais para complexos
Você pode converter números inteiros em números complexos usando complex(real,imag)
. Ele requer dois números inteiros (números reais e imaginários) e converte números reais em números complexos.
real = 2
imag = 5
print(complex(real, imag))
(2+5j)
Conversão de tipo de dados com cadeias de caracteres
Uma string é uma coleção de um ou mais caracteres (letras, números, símbolos). Talvez você precise converter cadeias de caracteres em números ou números em cadeias de caracteres com bastante frequência. Veja como você pode fazer isso usando a função str()
:
price_cake = 15
price_cookie = 6
total = price_cake + price_cookie
print("The total is: " + total + "$")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-54bd76b9b4bd> in <module>()
2 price_cookie = 6
3 total = price_cake + price_cookie
----> 4 print("The total is: " + total + "$")
TypeError: Can't convert 'int' object to str implicitly
O exemplo acima fornece um TypeError
, informando que o compilador não pode converter implicitamente um valor inteiro em uma string.
Pode parecer intuitivo para você o que o programa deve fazer aqui. No entanto, o compilador pode nem sempre ter certeza, e é por isso que ele fornece um mecanismo com a conversão explícita de tipos, para que você possa declarar claramente o que deseja. Vamos ver o mesmo exemplo com a conversão de tipos:
price_cake = 15
price_cookie = 6
total = price_cake + price_cookie
print("The total is: " + str(total) + "$")
The total is: 21$
Funciona da mesma forma quando você converte valores float em string.
No Python, você também pode converter cadeias de caracteres em valores inteiros e flutuantes sempre que possível. Vamos ver o que isso significa:
price_cake = '15'
price_cookie = '6'
# String concatenation
total = price_cake + price_cookie
print("The total is: " + total + "$")
# Explicit type conversion to integer
total = int(price_cake) + int(price_cookie)
print("The total is: " + str(total) + "$")
The total is: 156$
The total is: 21$
Vamos detalhar o código.
price_cake
e price_cookie
são inicialmente strings. Em seguida, você precisa encontrar o total, o que significa que eles devem ser primeiro convertidos em seus valores inteiros correspondentes. Caso contrário, o compilador assumirá que a operação que você deseja é uma concatenação de cadeia de caracteres em vez de uma adição numérica. Em seguida, você precisa colocar esse valor na cadeia de caracteres de exibição final e, consequentemente, precisa converter o total em uma cadeia de caracteres para concatená-lo com o restante da mensagem de exibição.
Esperamos que este exemplo ajude você a ver a importância das conversões de tipos de dados. Embora esse seja um exemplo muito pequeno de conversão de tipos de dados, você já pode ver como ele pode ser útil.
Observação: você notou o "sempre que possível" ao tentar converter uma cadeia de caracteres em números inteiros ou float? Isso ocorre porque nem sempre é possível converter cadeias de caracteres em números e aplicar operações numéricas a elas. O compilador está ciente disso e, portanto, apresentará um erro quando você tentar fazer isso. Veja o exemplo abaixo:
price_cake = 'fifteen'
price_cookie = 'six'
total = int(price_cake) + int(price_cookie)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-25-80591b8accda> in <module>()
1 price_cake = 'fifteen'
2 price_cookie = 'six'
----> 3 total = int(price_cake) + int(price_cookie)
ValueError: invalid literal for int() with base 10: 'fifteen'
Estruturas de dados não primitivas
Conversão de tipos para tuplas e listas
Assim como com os números inteiros e flutuantes, você também pode converter listas em tuplas e tuplas em listas.
Você se lembra do que são tuplas e listas? As listas e tuplas em Python são usadas para armazenar uma coleção de itens homogêneos. A diferença entre tuplas e listas é que as tuplas são imutáveis, o que significa que, uma vez definidas, você não pode excluir, adicionar ou editar nenhum valor dentro delas.
Por que você converteria listas em tuplas?
Isso ocorre porque as tuplas são tipos de dados imutáveis e permitem uma otimização substancial dos programas que você cria.
E por que você converteria tuplas em listas?
Talvez você queira fazer alterações na tupla inicial. Assim, você pode convertê-las em listas e, em seguida, fazer a alteração e convertê-las novamente em tuplas.
Você pode usar a função tuple()
para retornar uma versão em tupla do valor passado a ela e, da mesma forma, a função list()
para converter em uma lista:
a_tuple = ('a', 1) ,('f', 2), ('g', 3)
b_list = [1,2,3,4,5]
print(tuple(b_list))
print(list(a_tuple))
(1, 2, 3, 4, 5)
[('a', 1), ('f', 2), ('g', 3)]
Você também pode converter uma cadeia de caracteres em uma lista ou uma tupla.
dessert = 'Cake'
# Convert the characters in a string to individual items in a tuple
print(tuple(dessert))
# Convert a string into a list
dessert_list = list(dessert)
dessert_list.append('s')
print(dessert_list)
('C', 'a', 'k', 'e')
['C', 'a', 'k', 'e', 's']
Conversão de tipos em dicionários e conjuntos
Você pode usar a função dict()
para converter uma tupla em um dicionário e set()
para converter uma lista em um conjunto.
print(dict(a_tuple))
print(set(b_list))
{'a': 1, 'f': 2, 'g': 3}
{1, 2, 3, 4, 5}
Mais simples do que outras funções de conversão, você só precisa fornecer um nome de função para converter qualquer tipo de dado em dicionários e conjuntos.
Inteiros Unicode, binários, octais e hexadecimais em Python
Os sistemas numéricos referem-se ao número de símbolos ou caracteres usados para representar qualquer valor numérico. O sistema numérico que você normalmente usa todos os dias é chamado de decimal. No sistema decimal, você usa dez símbolos diferentes: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Com esses dez símbolos, você pode representar qualquer quantidade. Unicode, Binário, Hexadecimal e Octal referem-se a sistemas numéricos diferentes.
Quando ficar sem símbolos, você passará para a colocação do próximo dígito. No sistema decimal, para representar um número maior que 9, você usa 10, o que significa uma unidade de dez e zero unidades de um. No entanto, isso é diferente em outros sistemas numéricos. Por exemplo, quando você considera um sistema binário que usa apenas dois símbolos: 0 e 1, quando você ficar sem símbolos, precisará passar para a colocação do próximo dígito. Portanto, é assim que você contará em binário: 0, 1, 10, 11, 100, 101 e assim por diante.
Vamos verificar alguns dos sistemas numéricos em mais detalhes nas próximas seções.
Converter binário em decimal em Python
Os números inteiros binários são os números representados na base dois. Isso significa que, no sistema numérico binário, há apenas dois símbolos usados para representar números: 0 e 1. Ao contar de zero em binário, você fica sem símbolos mais rapidamente: 0, 1, ???
Além disso, não há mais símbolos restantes. Você não vai para o dígito 2 porque o 2 não existe em binário. Em vez disso, você usa uma combinação especial de 1s e 0s. Em um sistema binário, 1000 é igual a 8 em decimal. Em binário, você usa potências de dois, o que significa que 8 é basicamente: (1(2^3)) + (0(2^2)) + (0(2^1)) + (0(2^0))= 8. A posição do 1 e do 0 define a potência para a qual 2 deve ser elevado.
Vamos ver isso com um exemplo mais complexo para que fique mais claro:
Binary Number = 1001111
Decimal value = (1*(2^6)) + (0*(2^5)) + (0*(2^4)) + (1*(2^3)) + (1*(2^2)) + (1*(2^1)) + (1*(2^0))
= 79
Em Python, você pode simplesmente usar a função bin() para converter de um valor decimal para o valor binário correspondente.
Da mesma forma, a função int()
converte um binário em seu valor decimal. A função int()
recebe como segundo argumento a base do número a ser convertido, que é 2 no caso de números binários.
a = 79
# Base 2(binary)
bin_a = bin(a)
print(bin_a)
print(int(bin_a, 2)) #Base 2(binary)
0b1001111
79
Converter octal em decimal em Python
O Octal é outro sistema numérico com menos símbolos a serem usados do que o sistema numérico decimal convencional. Octal é a base oito, o que significa que oito símbolos são usados para representar todas as quantidades. Eles são 0, 1, 2, 3, 4, 5, 6 e 7. Depois do 7 vem o 10, já que o 8 não existe.
Assim como você usou potências de dois em binário para determinar o valor de um número, você usará potências de 8, pois essa é a base oito.
Em um sistema binário, 10 é igual a 8 em octal. Vamos detalhar isso: (1(8^1)) + (0(8^0))= 8.
Um exemplo mais complexo:
Octal Number = 117
Decimal value = (1*(8^2)) + (1*(8^1)) + (7*(8^0))
= 79
Em Python, você pode usar a função oct()
para converter de um valor decimal para o valor octal correspondente. Como alternativa, você também pode usar a função int() junto com a base correta, que é 8 para o sistema numérico octal.
a = 79
# Base 8(octal)
oct_a = oct(a)
print(oct_a)
print(int(oct_a, 8))
0o117
79
Converter hexadecimal em decimal em Python
Hexadecimal é um sistema numérico de base 16. Ao contrário do binário e do octal, o hexadecimal tem seis símbolos adicionais que são usados além dos números encontrados no sistema numérico decimal.
Mas o que vem depois do 9?
Quando forem necessários símbolos adicionais além dos valores numéricos normais, você deverá usar letras. Portanto, em hexadecimal, a lista total de símbolos usados é: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F.
Usando o mesmo exemplo anterior:
Hexadecimal Number = 4F
Decimal value = (4*(16^1)) + (F*(16^0))
= 79
Em Python, você pode usar a função hex()
para converter de um valor decimal para o valor hexadecimal correspondente ou a função int()
com base 16 para o sistema de números hexadecimais.
a = 79
# Base 16(hexadecimal)
hex_a = hex(a)
print(hex_a)
print(int(hex_a, 16))
0x4f
79
Converter Unicode em caractere
Python chr()
converte inteiros unicode em string. O Unicode é uma codificação de caracteres universalmente aceita para exibir os textos escritos de diversos idiomas.
Fornecemos vários números inteiros unicode à função chr()
para exibir "DATACAMP". Você também pode usar ord()
para converter um único caractere em um número inteiro unicode.
print(
chr(68),
chr(65),
chr(84),
chr(65),
chr(67),
chr(65),
chr(77),
chr(80),
)
D A T A C A M P
Você conseguiu!
Parabéns! Você aprendeu sobre conversões de tipos de dados em Python, principalmente usando métodos incorporados. Isso certamente ajudará você a trabalhar com vários tipos de dados, proporcionando mais flexibilidade ao escrever seus programas.
Temos um excelente curso sobre Python Intermediário para Ciência de Dados, no qual você pode aprender a plotar seus dados usando matplotlib e trabalhar com dicionários e o famoso DataFrame do pandas. Você também verá como pode controlar o fluxo do programa com loops. Há também um estudo de caso no final do curso, no qual você poderá aplicar tudo o que aprendeu e colocar seu conhecimento em prática!
Saiba mais sobre Python
curso
Intermediate Python
curso
Introduction to Functions in Python
tutorial
Operadores em Python
tutorial
Tutorial de funções Python
tutorial
Tutorial de manipulação de dados categóricos de aprendizado de máquina com Python
tutorial
Programação orientada a objetos em Python (OOP): Tutorial
tutorial
Tutorial de Python
DataCamp Team
3 min
tutorial