Convertir avec astype()
Convertissez les colonnes en int, float, string, boolean et datetime avec astype(), et gérez les erreurs de conversion courantes.
Convertir avec astype() est une leçon Pandas & NumPy Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Pandas & NumPy Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Pandas & NumPy Academy comprend 4 leçons au total.
Introduction à astype()
Series.astype(dtype) convertit une colonne de son type actuel vers le type que vous indiquez. La fonction renvoie une nouvelle Series (ou un DataFrame lorsqu'elle est appelée sur un DataFrame entier) sans modifier l'original. Il s'agit de l'outil Pandas principal pour corriger les problèmes de types de données après le chargement des données ; il permet de convertir des types numériques, en chaînes, en valeurs booléennes et vers le type Categorical.
import pandas as pd
df = pd.DataFrame({'age': ['25', '30', '35']})
print('Before:', df['age'].dtype) # object
df['age'] = df['age'].astype(int)
print('After:', df['age'].dtype) # int64
print(df['age'] + 1) # [26, 31, 36] — arithmetic now worksConvertir vers des types numériques
La conversion la plus courante consiste à passer de object à un type numérique. Vous pouvez convertir vers 'int64', 'int32', 'float64', 'float32', etc. Si une valeur de la colonne ne peut pas être convertie, astype() déclenche une ValueError. Utilisez plutôt pd.to_numeric(series, errors='coerce') lorsque la colonne peut contenir des chaînes non numériques : les valeurs incorrectes sont alors converties en NaN au lieu de provoquer une erreur.
import pandas as pd
df = pd.DataFrame({'price': ['10.5', '20.0', 'N/A', '30.5']})
# astype would crash on 'N/A'
# price_float = df['price'].astype(float) # ValueError!
# pd.to_numeric with errors='coerce' is safer
df['price_float'] = pd.to_numeric(df['price'], errors='coerce')
print(df)
# price price_float
# 0 10.5 10.5
# 1 20.0 20.0
# 2 N/A NaN
# 3 30.5 30.5Convertir en chaîne (objet)
Convertir une colonne vers str (ou 'object') transforme chaque valeur en sa représentation sous forme de chaîne. Cette opération est utile lorsque vous devez concaténer une colonne numérique avec une colonne textuelle, ou lorsque vous souhaitez appliquer des méthodes de chaîne à des données numériques, par exemple pour ajouter des zéros au début d'identifiants. Pandas propose également le type de données plus récent 'string', qui offre une meilleure gestion de NA pour les colonnes textuelles.
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3], 'region': ['E', 'W', 'N']})
# Concatenate id and region into a composite key
df['key'] = df['id'].astype(str) + '_' + df['region']
print(df)
# id region key
# 0 1 E 1_E
# 1 2 W 2_W
# 2 3 N 3_NConvertir en valeurs booléennes
La conversion en valeurs booléennes est utile lorsque les colonnes stockent True/False sous forme d'entiers (0/1) ou de chaînes (« Yes »/« No »). La conversion directe des entiers 0/1 avec astype(bool) fonctionne ainsi : 0 devient False et toute valeur différente de zéro devient True. Pour les colonnes contenant les chaînes « Yes »/« No », utilisez d'abord map avec un dictionnaire, puis effectuez la conversion.
import pandas as pd
df = pd.DataFrame({
'active_int': [1, 0, 1, 0],
'active_str': ['Yes', 'No', 'Yes', 'No']
})
# Integer to bool
df['active_bool'] = df['active_int'].astype(bool)
# String to bool via mapping
df['active_bool2'] = df['active_str'].map({'Yes': True, 'No': False})
print(df[['active_bool', 'active_bool2']])
# active_bool active_bool2
# 0 True True
# 1 False FalseRéduire la taille des types numériques
Par défaut, Pandas utilise des types sur 64 bits. Si vos valeurs entières tiennent sur 32, voire 8 bits, vous pouvez effectuer une réduction de type vers un type plus petit afin de diviser par deux (ou quatre) l'utilisation de la mémoire. Utilisez pd.to_numeric(series, downcast='integer') ou effectuez explicitement la conversion avec astype('int32'). Il s'agit d'une optimisation essentielle pour les grands jeux de données.
import pandas as pd
import numpy as np
df = pd.DataFrame({'count': np.random.randint(0, 200, 1_000_000)})
print('int64 bytes:', df['count'].nbytes) # 8,000,000
df['count_int16'] = df['count'].astype('int16') # max 32767, fits 0-200
print('int16 bytes:', df['count_int16'].nbytes) # 2,000,000
# Or let Pandas choose the smallest type automatically
df['count_auto'] = pd.to_numeric(df['count'], downcast='integer')
print('auto dtype:', df['count_auto'].dtype)Convertir des DataFrames entiers avec astype(dict)
Vous pouvez convertir plusieurs colonnes en une seule fois en transmettant un dictionnaire à df.astype(), dont les clés sont les noms des colonnes et les valeurs les types de données cibles. Cette méthode est plus claire que d'enchaîner des affectations de colonnes individuelles et rend l'étape de conversion des types explicite dans un seul bloc de votre chaîne de traitement.
import pandas as pd
df = pd.DataFrame({
'age': ['25', '30'],
'salary': ['50000', '70000'],
'is_manager': ['1', '0']
})
df = df.astype({
'age': 'int32',
'salary': 'float64',
'is_manager': 'bool'
})
print(df.dtypes)
# age int32
# salary float64
# is_manager boolGérer les erreurs dans astype()
astype() ne possède pas de mode intégré tolérant les erreurs, contrairement à pd.to_numeric. Si une conversion échoue, la fonction déclenche une ValueError ou une OverflowError. La méthode sûre consiste à : (1) nettoyer d'abord la colonne (supprimer les symboles, remplacer les valeurs NaN), puis (2) effectuer la conversion. Vous pouvez aussi utiliser pd.to_numeric(errors='coerce') pour les valeurs numériques, ou écrire une petite fonction auxiliaire qui intercepte les erreurs de conversion.
import pandas as pd
# Clean then cast pattern
df = pd.DataFrame({'price': ['$1,200', '$800', '$450']})
# Step 1: remove non-numeric characters
df['price_clean'] = (
df['price']
.str.replace('$', '', regex=False)
.str.replace(',', '', regex=False)
)
# Step 2: safe cast
df['price_num'] = df['price_clean'].astype(float)
print(df)
# price price_clean price_num
# 0 $1,200 1200 1200.0
# 1 $800 800 800.0
# 2 $450 450 450.0Convertir vers le type StringDtype de Pandas
Le type de données plus récent 'string' (variante avec un S majuscule ou pd.StringDtype()) a été introduit pour offrir une prise en charge native des chaînes avec une gestion correcte de NA : les chaînes manquantes sont stockées sous forme de pd.NA, plutôt que de None ou np.nan. Il active l'accesseur .str tout en préservant mieux la sémantique de NA que le type de données object, et il est recommandé pour le nouveau code ciblant Pandas 2 ou une version ultérieure.
import pandas as pd
df = pd.DataFrame({'name': ['Alice', None, 'Carol']})
# Convert to the modern string dtype
df['name'] = df['name'].astype('string')
print(df['name'].dtype) # string
print(df['name'].isna()) # proper NA detection
# 0 False
# 1 True
# 2 FalseRisques de dépassement lors de la réduction de type
Lorsque vous réduisez un type entier vers un type plus petit, les valeurs qui dépassent la plage du type provoquent silencieusement un dépassement et reviennent dans la plage par bouclage. Par exemple, convertir 300 en int8 (plage de -128 à 127) produit 44 sans déclencher d'erreur. Vérifiez toujours que la plage réelle de vos données tient dans le type cible avant de réduire le type, afin d'éviter une corruption difficile à détecter.
import pandas as pd
import numpy as np
df = pd.DataFrame({'value': [100, 200, 300, 127, 128]})
# int8 range: -128 to 127
df['value_i8'] = df['value'].astype('int8')
print(df)
# value value_i8
# 0 100 100
# 1 200 -56 <- overflow! 200-256 = -56
# 2 300 44 <- overflow! 300-256 = 44
# 3 127 127
# 4 128 -128 <- overflow!
# Always check range first
print(df['value'].max()) # 300 > 127 — int8 is UNSAFE hereVérifier les conversions avec une map des types de données
Après plusieurs conversions de types, validez le schéma final en comparant les types de données réels à une map attendue. Ce modèle d'assertion détecte les erreurs telles qu'une colonne qui n'a pas été convertie (par exemple parce que NaN empêchait la conversion en entier). Effectuez ces vérifications à la fin de votre fonction de chargement des données comme test léger du schéma.
import pandas as pd
df = pd.DataFrame({
'user_id': [1, 2, 3],
'amount': [10.5, 20.0, 30.5],
'active': [True, False, True]
})
expected = {'user_id': 'int64', 'amount': 'float64', 'active': 'bool'}
for col, dtype in expected.items():
assert str(df[col].dtype) == dtype, (
f'{col}: expected {dtype}, got {df[col].dtype}'
)
print('Schema validation passed')Exemple complet de chaîne de conversion
Pour tout regrouper, voici une chaîne réaliste de conversion après read_csv qui nettoie la mise en forme, gère NaN en toute sécurité, convertit vers des types optimaux et valide le résultat. Ce modèle — nettoyer, convertir, valider — devrait faire partie intégrante de chaque fonction d'ingestion de données.
import pandas as pd
raw = pd.DataFrame({
'user_id': ['101', '102', '103'],
'revenue': ['$1,200', '$800', '$2,500'],
'active': ['Yes', 'No', 'Yes']
})
df = (
raw
.assign(
user_id=raw['user_id'].astype('int32'),
revenue=pd.to_numeric(
raw['revenue'].str.replace('[$,]', '', regex=True)
),
active=raw['active'].map({'Yes': True, 'No': False})
)
)
print(df.dtypes)
# user_id int32
# revenue float64
# active boolVérification rapide
Vérifiez votre compréhension de la conversion avec astype().
Récapitulatif de la leçon
Dans cette leçon, vous avez appris que astype(dtype) convertit une colonne ou un DataFrame entier vers un nouveau type, que pd.to_numeric(errors='coerce') est plus sûr pour les colonnes contenant des chaînes non numériques, et que transmettre un dictionnaire à astype() permet de convertir plusieurs colonnes en une seule fois. Réduisez les types avec prudence pour éviter les dépassements, et validez toujours le schéma final avec des assertions. Ensuite, nous découvrirons le type de données Categorical, économe en mémoire.
Questions Fréquemment Posées
La leçon « Convertir avec astype() » est-elle gratuite ?
Oui — le texte complet de « Convertir avec astype() » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Pandas & NumPy Academy, passe à CoddyKit PRO. Le cours Pandas & NumPy Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Convertir avec astype() » ?
Convertissez les colonnes en int, float, string, boolean et datetime avec astype(), et gérez les erreurs de conversion courantes. Tu pratiques Pandas & NumPy Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Pandas & NumPy Academy ?
Aucune expérience préalable n'est requise. Pandas & NumPy Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Convertir avec astype() » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Pandas & NumPy Academy ?
Oui. Chaque leçon Pandas & NumPy Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Examiner les types de données des colonnes
- Convertir avec astype()
- Type de données catégorielles
- Analyser correctement les dates