Pandas é uma poderosa biblioteca Python para manipulação de dados, frequentemente usada com DataFrames contendo dados numéricos. Uma tarefa comum envolve converter colunas de números de ponto flutuante (floats) para inteiros. Este artigo detalha métodos eficientes para essa conversão dentro de um DataFrame Pandas, destacando seus pontos fortes e fracos.
Sumário
- Usando
astype(int)
para Conversão de Float para Inteiro - Aproveitando
pd.to_numeric()
para Conversão Flexível - Tratamento de Erros e Arredondamento Avançado
Usando astype(int)
para Conversão de Float para Inteiro
O método astype(int)
fornece uma abordagem direta para conversão de tipo em Pandas. Ele converte diretamente o tipo de dado de uma coluna para um inteiro. No entanto, é crucial entender seu comportamento: ele trunca a parte decimal, realizando efetivamente uma operação de floor. Isso significa que ele descarta a parte fracionária, arredondando sempre para baixo.
Exemplo:
import pandas as pd
data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1]}
df = pd.DataFrame(data)
df['col1_int'] = df['col1'].astype(int)
print(df)
Saída:
col1 col1_int
0 1.5 1
1 2.7 2
2 3.2 3
3 4.9 4
4 5.1 5
A simplicidade deste método é sua vantagem, mas seu comportamento inflexível de arredondamento limita sua aplicabilidade quando outras estratégias de arredondamento são necessárias.
Aproveitando pd.to_numeric()
para Conversão Flexível
pd.to_numeric()
oferece maior controle e flexibilidade. Embora projetado principalmente para converter vários tipos de dados para formatos numéricos, é altamente eficaz para conversões de float para inteiro, especialmente quando combinado com funções de arredondamento.
Exemplo com Arredondamento:
import pandas as pd
import numpy as np
data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1, np.nan]}
df = pd.DataFrame(data)
df['col1_int'] = pd.to_numeric(df['col1'], errors='coerce').round().astype(int)
print(df)
Saída:
col1 col1_int
0 1.5 2
1 2.7 3
2 3.2 3
3 4.9 5
4 5.1 5
5 NaN NaN
Aqui, errors='coerce'
trata graciosamente valores não numéricos convertendo-os para NaN
. round()
arredonda para o inteiro mais próximo antes da conversão final astype(int)
.
Tratamento de Erros e Arredondamento Avançado
Para um controle mais preciso sobre o arredondamento, use as funções do NumPy:
np.floor()
: Arredonda para baixo para o inteiro mais próximo.np.ceil()
: Arredonda para cima para o inteiro mais próximo.
Lembre-se de lidar com potenciais erros (como valores não numéricos) usando o parâmetro errors
em pd.to_numeric()
. Escolher 'coerce'
substitui valores problemáticos por NaN
, prevenindo erros. Alternativamente, 'raise'
irá levantar uma exceção, e 'ignore'
deixará os valores não numéricos intactos.