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 - Exploitation de
pd.to_numeric()
pour une conversion flexible - Gestion des erreurs et arrondissement avancé
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.