0Pricing
Pandas & NumPy Academy · Leçon

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 works

Convertir 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.5

Convertir 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_N

Convertir 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         False

Ré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     bool

Gé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.0

Convertir 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    False

Risques 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 here

Vé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        bool

Vé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

  1. Examiner les types de données des colonnes
  2. Convertir avec astype()
  3. Type de données catégorielles
  4. Analyser correctement les dates
← Retour à Pandas & NumPy Academy