Curso
Todo valor em Python tem um tipo de dado. Tipos de dados são uma classificação que informa ao compilador ou interpretador como você quer usar o dado. O tipo define as operações possíveis e a estrutura em que o dado será armazenado. Em ciência de dados, você vai frequentemente precisar mudar o tipo dos seus dados para facilitar o uso e a manipulação.
Python tem muitos tipos de dados. Você provavelmente já viu e trabalhou com alguns deles. Há inteiros e floats para lidar com valores numéricos, booleanos (bool) para trabalhar com verdadeiro/falso e strings para caracteres alfanuméricos. Você também pode usar listas, tuplas, dicionários e conjuntos, que são estruturas de dados onde é possível armazenar coleções de valores. Para saber mais, confira o curso Data Types in Python da DataCamp.
Para executar facilmente todo o código de exemplo deste tutorial por conta própria, você pode criar um workbook no DataLab gratuitamente, já com Python pré-instalado e contendo todas as amostras de código.
Verificando tipos de dados em Python
Antes de converter tipos de dados, é útil checá-los. Python oferece duas funções principais:
type(): retorna o tipo de uma variável.isinstance(): verifica se uma variável pertence a um determinado tipo.
a = 5.5
print(type(a)) # Output: <class 'float'>
print(isinstance(a, int)) # Output: False
print(isinstance(a, float)) # Output: True
Conversão implícita e explícita de tipos de dados em Python
A conversão de dados em Python pode acontecer de duas formas: ou você diz explicitamente ao compilador para converter um tipo em outro, ou o próprio compilador entende a necessidade e faz isso para você. No primeiro caso, você está realizando uma conversão de tipo explícita; no segundo, é uma conversão de tipo implícita.
Conversão implícita de tipos em Python
Conversão implícita, ou coerção, ocorre quando a conversão de tipo acontece durante a compilação ou em tempo de execução e é tratada automaticamente pelo Python. Veja 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() em Python para verificar o tipo de dado de um objeto.
Aprenda Python do zero
No exemplo, um valor inteiro a_int foi somado a um valor float b_float, e o resultado foi automaticamente convertido para um float c_sum sem que você precisasse instruir o compilador. Isso é conversão implícita.
Por que o valor float não foi convertido para inteiro em vez disso?
Isso se deve a um conceito mais amplo de promoção de tipo na ciência da computação. Em resumo, é um mecanismo de defesa do compilador que permite executar operações sempre que possível, convertendo seus dados para um supertipo diferente sem perder informação.
Ou seja, a conversão de float para inteiro não é feita porque o compilador teria que remover a parte fracionária, levando à perda de informação.
Conversão explícita de tipos em Python
A conversão explícita de tipos, também chamada de type casting, ocorre quando você converte deliberadamente um valor de um tipo para outro. Essa abordagem dá controle direto sobre a conversão, pois você especifica explicitamente o tipo de destino no código. Ela é comum quando a conversão automática (implícita) do Python não atende ao que você precisa.
A sintaxe para a conversão explícita é:
target_data_type(expression)
Por exemplo, se você quiser converter um número de ponto flutuante para inteiro, escreva:
int(3.14) # Converts 3.14 to 3
Atenção: embora conversões explícitas sejam muito úteis, elas podem causar perda de informação. Por exemplo, converter um número de ponto flutuante para inteiro descarta a parte fracionária. É importante entender essas consequências para evitar resultados indesejados nos seus programas.
Vamos explorar algumas conversões explícitas comuns.
Estruturas de dados primitivas versus não primitivas em Python
Estruturas de dados primitivas são os blocos básicos de manipulação de dados e contêm valores simples e puros. Python tem quatro tipos primitivos de variáveis:
- Inteiros
- Float
- Strings
- Booleano
Estruturas de dados não primitivas não armazenam apenas um valor, mas sim uma coleção de valores em vários formatos. Em Python, você tem as seguintes estruturas de dados não primitivas:
- Listas
- Tuplas
- Dicionários
- Sets
Você pode aprender mais sobre elas no tutorial Data Structures in Python da DataCamp.
Conversões em estruturas de dados primitivas
Conversões entre inteiro e float em Python
Inteiros e floats são tipos de dados numéricos.
Para converter um inteiro em float, use a função float() em Python. Da mesma forma, se quiser converter um float em inteiro, use a função int().
a_int = 3
b_int = 2
# Conversão explícita de int para float
c_float_sum = float(a_int + b_int)
print(c_float_sum)
5.0
a_float = 3.3
b_float = 2.0
# Conversão explícita de float para 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
Problemas de precisão com float e o módulo Decimal
A aritmética de ponto flutuante em Python pode levar a problemas de precisão:
print(0.1 + 0.2) # Output: 0.30000000000000004
Para evitar isso, use o módulo Decimal:
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2')) # Output: 0.3
Conversão de número real para complexo em Python
Você pode converter inteiros em números complexos usando complex(real,imag). Ela recebe dois inteiros (partes real e imaginária) e converte números reais em complexos.
real = 2
imag = 5
print(complex(real, imag))
(2+5j)
Conversão de tipos com strings em Python
Uma string é uma coleção de um ou mais caracteres (letras, números, símbolos). Com frequência você vai precisar converter strings em números ou números em strings.
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 gera um TypeError, informando que o compilador não pode converter implicitamente um inteiro em string.
O que o programa deveria fazer aqui pode parecer intuitivo para você. Porém, o compilador nem sempre tem certeza, então ele oferece um mecanismo de conversão explícita para que você diga claramente o que quer. Veja como converter um inteiro em string em Python usando a função str():
price_cake = 15
price_cookie = 6
total = price_cake + price_cookie
print("The total is: " + str(total) + "$")
The total is: 21$
Funciona do mesmo jeito ao converter float para string.
Em Python, você também pode converter strings em valores inteiros e float sempre que possível. Vamos ver o que isso significa:
price_cake = '15'
price_cookie = '6'
# Concatenação de strings
total = price_cake + price_cookie
print("The total is: " + total + "$")
# Conversão explícita para inteiro
total = int(price_cake) + int(price_cookie)
print("The total is: " + str(total) + "$")
The total is: 156$
The total is: 21$
Vamos destrinchar o código.
price_cake e price_cookie são inicialmente strings. Depois, você precisa encontrar o total, o que significa que primeiro devem ser convertidas para seus valores inteiros correspondentes. Caso contrário, o compilador vai assumir que a operação desejada é a concatenação de strings, não a soma numérica. Em seguida, você inclui esse valor na mensagem final e, consequentemente, precisa converter o total para string para concatená-lo ao restante do texto.
Com sorte, este exemplo ajuda você a ver a importância das conversões de tipo. Mesmo sendo um caso simples, já dá para notar o quanto isso é útil.
Observação: reparou no "sempre que possível" ao converter uma string para inteiro ou float? Isso porque nem sempre é possível converter strings em números e aplicar operações numéricas. O compilador sabe disso e, portanto, vai gerar um erro quando você tentar. 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'
Resumo: conversões de tipos de dados primitivos em Python
| Conversão | Função | Exemplo | Saída |
|---|---|---|---|
| Inteiro para float | float() |
float(3) |
3.0 |
| Float para inteiro | int() |
int(3.9) |
3 |
| String para inteiro | int() |
int('123') |
123 |
| Inteiro para string | str() |
str(123) |
'123' |
Conversões em estruturas de dados não primitivas
Conversão para tuplas e listas em Python
Assim como com inteiros e floats, você também pode converter listas em tuplas e tuplas em listas.
Lembra o que são tuplas e listas? Listas e tuplas em Python são usadas para armazenar coleções de itens homogêneos. A diferença é que tuplas são imutáveis: uma vez definidas, você não pode apagar, adicionar ou editar valores dentro delas.
Por que converter listas em tuplas?
Porque tuplas são imutáveis e permitem otimizações importantes nos programas que você cria.
E por que converter tuplas em listas?
Talvez você queira fazer mudanças na tupla original. Assim, você pode convertê-la em lista, fazer as alterações e depois converter de volta em tupla.
Em Python, use a função tuple() para retornar uma versão em tupla do valor passado e, de forma semelhante, list() para converter uma tupla em 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)]
Da mesma forma, veja como converter uma string em lista ou tupla em Python:
dessert = 'Cake'
# Converter os caracteres de uma string em itens individuais de uma tupla
print(tuple(dessert))
# Converter uma string em lista
dessert_list = list(dessert)
dessert_list.append('s')
print(dessert_list)
('C', 'a', 'k', 'e')
['C', 'a', 'k', 'e', 's']
Conversão para dicionários e sets em Python
Você pode usar dict() para converter uma tupla em dicionário e set() para converter uma lista em set.
print(dict(a_tuple))
print(set(b_list))
{'a': 1, 'f': 2, 'g': 3}
{1, 2, 3, 4, 5}
Semelhante a outras funções de conversão, basta fornecer o nome da função para converter qualquer tipo de dado em dicionários e sets.
Usando dataclasses para dados estruturados (Python 3.7+)
Em vez de usar dicionários ou tuplas, dataclasses oferecem uma forma melhor de lidar com dados estruturados.
from dataclasses import dataclass
@dataclass
class Product:
name: str
price: float
in_stock: bool
item = Product("Laptop", 799.99, True)
print(item) # Output: Product(name='Laptop', price=799.99, in_stock=True)
Resumo: conversões em estruturas de dados não primitivas em Python
| Conversão | Função | Exemplo | Saída |
|---|---|---|---|
| Lista para tupla | tuple() |
tuple([1, 2, 3]) |
(1, 2, 3) |
| Tupla para lista | list() |
list(('a', 1)) |
['a', 1] |
| String para lista | list() |
list('Cake') |
['C', 'a', 'k', 'e'] |
| String para tupla | tuple() |
tuple('Cake') |
('C', 'a', 'k', 'e') |
| Tupla para dicionário | dict() |
dict((('a', 1), ('b', 2))) |
{'a': 1, 'b': 2} |
| Lista para set | set() |
set([1, 2, 3, 4, 5]) |
{1, 2, 3, 4, 5} |
Unicode, binário, octal e hexadecimal em Python
Sistemas numéricos se referem ao conjunto de símbolos ou caracteres usados para representar valores numéricos. O sistema que você usa no dia a dia é o decimal. No sistema decimal, usamos dez símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Com esses dez símbolos, é possível representar qualquer quantidade. Unicode, binário, hexadecimal e octal se referem a diferentes sistemas numéricos.
Você passa para a próxima casa quando os símbolos acabam. No decimal, para representar um a mais que 9, usamos 10, que significa uma unidade de dez e zero unidades de um. Em outros sistemas é diferente. Por exemplo, no sistema binário, que usa apenas 0 e 1, você precisa ir para a próxima casa quando os símbolos acabam. A contagem fica: 0, 1, 10, 11, 100, 101, etc.
Vamos ver alguns desses sistemas com mais detalhes nas próximas seções.
Converter binário para decimal em Python
Números binários são representados na base dois. Ou seja, apenas dois símbolos são usados: 0 e 1. Ao contar a partir de zero em binário, os símbolos acabam mais rápido: 0, 1, ???
Não há mais símbolos disponíveis. Você não vai para o dígito 2, pois 2 não existe em binário. Em vez disso, usa combinações de 1s e 0s. Em binário, 1000 é igual a 8 no decimal. No binário, você usa potências de dois, então 8 é basicamente: (1(2^3)) + (0(2^2)) + (0(2^1)) + (0(2^0)) = 8. A posição de 1 e 0 define a potência a que o 2 é elevado.
Veja um exemplo mais complexo para ficar 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 um valor decimal para seu correspondente binário.
Da mesma forma, use int() para converter um binário em decimal. A função int() recebe como segundo argumento a base do número a ser convertido, que é 2 no caso de binário.
a = 79
# Base 2 (binário)
bin_a = bin(a)
print(bin_a)
print(int(bin_a, 2)) # Base 2 (binário)
0b1001111
79
Converter octal para decimal em Python
Octal é outro sistema com menos símbolos que o decimal. É base oito, o que significa que oito símbolos representam todas as quantidades: 0, 1, 2, 3, 4, 5, 6 e 7. Depois do 7 vem 10, já que 8 não existe.
Assim como você usou potências de dois no binário para determinar o valor, aqui você usará potências de 8 por ser base oito.
No sistema octal, 10 é igual a 8 no decimal. Detalhando: (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 um valor decimal para seu correspondente octal. Alternativamente, use int() com a base correta, que é 8 no sistema octal.
a = 79
# Base 8 (octal)
oct_a = oct(a)
print(oct_a)
print(int(oct_a, 8))
0o117
79
Converter hexadecimal para decimal em Python
Hexadecimal é um sistema de base 16. Diferente de binário e octal, ele usa seis símbolos adicionais além dos números do sistema decimal.
Mas o que vem depois do 9?
Quando são necessários símbolos além dos valores numéricos, usam-se letras. Assim, em hexadecimal, a lista de símbolos é 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F.
Usando o mesmo exemplo de antes:
Hexadecimal Number = 4F
Decimal value = (4*(16^1)) + (F*(16^0))
= 79
Em Python, você pode usar a função hex() para converter um valor decimal em seu correspondente hexadecimal, ou int() com base 16 para o sistema hexadecimal.
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. Unicode é uma codificação de caracteres universalmente aceita para exibir textos escritos de diversos idiomas.
Fornecemos vários inteiros Unicode para a função chr() para exibir “DATACAMP”. Você também pode usar ord() para converter um único caractere em um 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
Resumo: conversões entre sistemas numéricos em Python
| Conversão | Função | Exemplo | Saída |
|---|---|---|---|
| Decimal para binário | bin() |
bin(79) |
0b1001111 |
| Binário para decimal | int() |
int('1001111', 2) |
79 |
| Decimal para octal | oct() |
oct(79) |
0o117 |
| Octal para decimal | int() |
int('117', 8) |
79 |
| Decimal para hex | hex() |
hex(79) |
0x4f |
| Hex para decimal | int() |
int('4F', 16) |
79 |
| Unicode para caractere | chr() |
chr(68) |
'D' |
| Caractere para Unicode | ord() |
ord('D') |
68 |
Você chegou ao fim!
Parabéns! Você aprendeu sobre conversões de tipos de dados em Python, principalmente usando métodos nativos. Isso com certeza vai ajudar você a lidar com diferentes tipos de dados, dando mais flexibilidade na hora de escrever seus programas.
Temos um excelente curso de Intermediate Python for Data Science no qual você vai aprender a plotar dados com matplotlib e trabalhar com dicionários e o famoso DataFrame do pandas. Você também verá como controlar o fluxo do programa com laços. No fim do curso há um estudo de caso para aplicar tudo o que aprendeu e colocar o conhecimento em prática!
Projetos Python para todos os níveis
FAQs
Você pode usar o método join() combinado com map() para converter cada inteiro em string e concatená-los.
int_list = [1, 2, 3, 4]
result = ''.join(map(str, int_list))
print(result) # Output: '1234'
Um ValueError será gerado indicando que a string não é um inteiro válido.
int('abc') # Raises ValueError: invalid literal for int() with base 10: 'abc'
Sim, você pode converter um set em lista usando a função list().
a_set = {1, 2, 3}
a_list = list(a_set)
print(a_list) # Output: [1, 2, 3]
Use o método split() para dividir a string e map() para converter cada parte em inteiro.
numbers = "1 2 3 4"
int_list = list(map(int, numbers.split()))
print(int_list) # Output: [1, 2, 3, 4]
Você pode usar a função type() para verificar o tipo de dado de uma variável.
x = 5
print(type(x)) # Output: <class 'int'>
Eu uso vários chapéus: Desenvolvedor de software, programador, cientista de dados, desenvolvedor de business intelligence, proprietário de produto

