Data Wrangling

Conversion Efficace Flottant-Entier dans les DataFrames Pandas

Spread the love

Pandas est une puissante librairie Python pour la manipulation de données, fréquemment utilisée avec des DataFrames contenant des données numériques. Une tâche courante consiste à convertir des colonnes de nombres à virgule flottante (floats) en entiers. Cet article détaille des méthodes efficaces pour cette conversion au sein d’un DataFrame Pandas, en soulignant leurs forces et leurs faiblesses.

Table des matières

Utilisation de astype(int) pour la conversion Float-Int

La méthode astype(int) fournit une approche simple pour la conversion de type dans Pandas. Elle convertit directement le type de données d’une colonne en entier. Cependant, il est crucial de comprendre son comportement : elle tronque la partie décimale, effectuant efficacement une opération de partie entière. Cela signifie qu’elle supprime la composante fractionnaire, arrondissant toujours vers le bas.

Exemple :


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)

Sortie :


   col1  col1_int
0   1.5         1
1   2.7         2
2   3.2         3
3   4.9         4
4   5.1         5

La simplicité de cette méthode est son avantage, mais son comportement d’arrondissement inflexible limite son applicabilité lorsque d’autres stratégies d’arrondissement sont nécessaires.

Exploitation de pd.to_numeric() pour une conversion flexible

pd.to_numeric() offre un meilleur contrôle et plus de flexibilité. Bien que principalement conçue pour convertir divers types de données en formats numériques, elle est très efficace pour les conversions float-entier, surtout lorsqu’elle est combinée à des fonctions d’arrondissement.

Exemple avec arrondissement :


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)

Sortie :


   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

Ici, errors='coerce' gère élégamment les valeurs non numériques en les convertissant en NaN. round() arrondit au nombre entier le plus proche avant la conversion finale astype(int).

Gestion des erreurs et arrondissement avancé

Pour un contrôle plus précis de l’arrondissement, utilisez les fonctions de NumPy :

  • np.floor() : Arrondissement vers le bas au nombre entier le plus proche.
  • np.ceil() : Arrondissement vers le haut au nombre entier le plus proche.

N’oubliez pas de gérer les erreurs potentielles (comme les valeurs non numériques) à l’aide du paramètre errors dans pd.to_numeric(). Le choix de 'coerce' remplace les valeurs problématiques par NaN, empêchant les erreurs. Alternativement, 'raise' lèvera une exception, et 'ignore' laissera les valeurs non numériques intactes.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *