Data Wrangling

Conversão Eficiente de Float para Inteiro em DataFrames Pandas

Spread the love

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

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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *