Pandas & NumPy Academy · Lektion

Typumwandlung mit astype()

Konvertieren Sie Spalten mit astype() in int, float, string, boolean und datetime und behandeln Sie typische Konvertierungsfehler.

Lektion 2 von 413 Schritte

Typumwandlung mit astype() ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.

Einführung in astype()

Series.astype(dtype) konvertiert eine Spalte von ihrem aktuellen Typ in den von Ihnen angegebenen Typ. Die Methode gibt eine neue Series zurück (oder einen DataFrame, wenn sie auf einen vollständigen DataFrame angewendet wird), ohne das Original zu verändern. Dies ist das wichtigste Pandas-Werkzeug zum Beheben von dtype-Problemen nach dem Laden von Daten. Es kann zwischen numerischen Typen sowie in Strings, boolesche Werte und den Typ Categorical konvertieren.

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

In numerische Typen konvertieren

Die häufigste Konvertierung führt von object zu einem numerischen Typ. Sie können in 'int64', 'int32', 'float64', 'float32' usw. umwandeln. Wenn ein Wert in der Spalte nicht konvertiert werden kann, löst astype() einen ValueError aus. Verwenden Sie stattdessen pd.to_numeric(series, errors='coerce'), wenn die Spalte möglicherweise nicht numerische Strings enthält — ungültige Werte werden dann in NaN umgewandelt, anstatt einen Fehler auszulösen.

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

In String (object) konvertieren

Durch die Konvertierung einer Spalte in str (oder 'object') wird jeder Wert in seine String-Darstellung umgewandelt. Das ist nützlich, wenn Sie eine numerische Spalte mit einer Textspalte verketten oder String-Methoden auf numerische Daten anwenden möchten, etwa um IDs mit führenden Nullen aufzufüllen. Pandas bietet außerdem den neueren dtype 'string', der eine bessere Behandlung von NA-Werten in Textspalten ermöglicht.

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

In boolesche Werte konvertieren

Die Konvertierung in boolesche Werte ist nützlich, wenn Spalten True/False als Ganzzahlen (0/1) oder als Strings ('Yes'/'No') speichern. Die Umwandlung von 0/1-Ganzzahlen mit astype(bool) funktioniert direkt: 0 wird zu False, jeder Wert ungleich null zu True. Bei Spalten mit den Strings 'Yes'/'No' wenden Sie zunächst ein Dictionary mit map an und konvertieren anschließend den Typ.

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

Numerische Typen downcasten

Standardmäßig verwendet Pandas 64-Bit-Typen. Wenn Ihre Ganzzahlwerte in 32 oder sogar 8 Bits passen, können Sie sie auf einen kleineren Typ downcasten und so den Speicherverbrauch halbieren (oder auf ein Viertel reduzieren). Verwenden Sie pd.to_numeric(series, downcast='integer') oder konvertieren Sie explizit mit astype('int32'). Das ist eine wichtige Optimierung für große Datensätze.

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)

Vollständige DataFrames mit astype(dict) konvertieren

Sie können mehrere Spalten gleichzeitig konvertieren, indem Sie ein Dictionary an df.astype() übergeben. Die Schlüssel sind dabei Spaltennamen und die Werte die Zieldtypes. Das ist übersichtlicher, als einzelne Spaltenzuweisungen aneinanderzureihen, und dokumentiert den Konvertierungsschritt als zusammenhängenden Block in Ihrer Pipeline.

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

Fehler in astype() behandeln

astype() verfügt über keinen integrierten fehlertoleranten Modus (anders als pd.to_numeric). Wenn eine Konvertierung fehlschlägt, wird ein ValueError oder OverflowError ausgelöst. Der sichere Ablauf ist: (1) Bereinigen Sie die Spalte zuerst (Symbole entfernen, NaN-Werte auffüllen), (2) konvertieren Sie anschließend den Typ. Alternativ können Sie für numerische Werte pd.to_numeric(errors='coerce') verwenden oder eine kleine Hilfsfunktion schreiben, die Konvertierungsfehler abfängt.

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

In Pandas StringDtype konvertieren

Der neuere dtype 'string' (Variante mit großem S oder pd.StringDtype()) wurde eingeführt, um eine umfassende String-Unterstützung mit korrekter Behandlung von NA-Werten bereitzustellen — fehlende Strings werden als pd.NA statt als None oder np.nan gespeichert. Er ermöglicht den .str-Accessor und bewahrt die NA-Semantik besser als der dtype object. Für neuen Code mit Pandas 2+ wird er empfohlen.

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

Overflow-Risiken beim Downcasten

Wenn Sie auf einen kleineren Integer-Typ downcasten, können Werte außerhalb des Wertebereichs des Typs unbemerkt einen Overflow verursachen und überlaufen. Wenn Sie beispielsweise 300 in int8 (Bereich -128 bis 127) konvertieren, entsteht 44, ohne dass ein Fehler ausgelöst wird. Überprüfen Sie immer, ob der tatsächliche Wertebereich Ihrer Daten in den Zieltyp passt, bevor Sie downcasten, um schwer erkennbare Datenverfälschungen zu vermeiden.

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

Konvertierungen mit einer Dtype-Map überprüfen

Validieren Sie nach mehreren Typkonvertierungen das endgültige Schema, indem Sie die tatsächlichen dtypes mit einer erwarteten Map vergleichen. Dieses Assertion-Muster erkennt Fehler, etwa wenn eine Spalte nicht konvertiert werden konnte (z. B. weil NaN die Konvertierung in einen Integer-Typ verhindert hat). Führen Sie diese Prüfungen am Ende Ihrer Datenladefunktion als schlanken Schematest aus.

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')

Beispiel für eine vollständige Konvertierungspipeline

Hier wird alles zusammengeführt: eine realistische Konvertierungspipeline nach read_csv, die Formatierungen bereinigt, NaN sicher behandelt, optimale Typen verwendet und das Ergebnis validiert. Dieses Muster — bereinigen, konvertieren, validieren — sollte Bestandteil jeder Funktion zur Datenaufnahme sein.

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

Schnelltest

Testen Sie Ihr Verständnis für die Typkonvertierung mit astype().

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: astype(dtype) konvertiert eine Spalte oder einen vollständigen DataFrame in einen neuen Typ, pd.to_numeric(errors='coerce') ist sicherer für Spalten mit nicht numerischen Strings, und durch die Übergabe eines Dictionarys an astype() können mehrere Spalten gleichzeitig konvertiert werden. Downcasten Sie sorgfältig, um Overflow zu vermeiden, und validieren Sie das endgültige Schema immer mit Assertions. Als Nächstes untersuchen wir den speichereffizienten Categorical-Dtype.

Kostenlos starten

Lerne Python mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
30
Lektionen
120

Häufig gestellte Fragen

Ist die Lektion „Typumwandlung mit astype()“ kostenlos?

Ja — der vollständige Text von „Typumwandlung mit astype()“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Typumwandlung mit astype()“?

Konvertieren Sie Spalten mit astype() in int, float, string, boolean und datetime und behandeln Sie typische Konvertierungsfehler. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?

Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Typumwandlung mit astype()“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?

Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Datentypen von Spalten untersuchen
  2. Typumwandlung mit astype()
  3. Kategorischer Datentyp
  4. Datumsangaben korrekt parsen
← Zurück zu Pandas & NumPy Academy