Data Wrangling

Effiziente Float-zu-Integer-Konvertierung in Pandas DataFrames

Spread the love

Pandas ist eine leistungsstarke Python-Bibliothek zur Datenmanipulation, die häufig mit DataFrames verwendet wird, die numerische Daten enthalten. Eine häufige Aufgabe besteht darin, Spalten mit Gleitkommazahlen (Floats) in ganze Zahlen umzuwandeln. Dieser Artikel beschreibt effiziente Methoden für diese Konvertierung innerhalb eines Pandas DataFrame und hebt deren Stärken und Schwächen hervor.

Inhaltsverzeichnis

Verwendung von astype(int) für die Float-zu-Int-Konvertierung

Die Methode astype(int) bietet einen unkomplizierten Ansatz zur Typumwandlung in Pandas. Sie wandelt den Datentyp einer Spalte direkt in eine ganze Zahl um. Es ist jedoch wichtig, ihr Verhalten zu verstehen: Sie schneidet den Dezimalteil ab und führt effektiv eine Floor-Operation durch. Das bedeutet, dass sie den Bruchteil verwirft und immer abrundet.

Beispiel:


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)

Ausgabe:


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

Die Einfachheit dieser Methode ist ihr Vorteil, aber ihr unflexibles Rundungsverhalten schränkt ihre Anwendbarkeit ein, wenn andere Rundungsstrategien erforderlich sind.

Nutzen von pd.to_numeric() für flexible Konvertierung

pd.to_numeric() bietet mehr Kontrolle und Flexibilität. Obwohl es hauptsächlich für die Konvertierung verschiedener Datentypen in numerische Formate entwickelt wurde, ist es sehr effektiv für Float-zu-Int-Konvertierungen, insbesondere in Kombination mit Rundungsfunktionen.

Beispiel mit Runden:


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)

Ausgabe:


   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

Hier behandelt errors='coerce' nicht-numerische Werte elegant, indem es sie in NaN umwandelt. round() rundet auf die nächste ganze Zahl, bevor die endgültige astype(int)-Konvertierung durchgeführt wird.

Fehlerbehandlung und erweitertes Runden

Für eine präzisere Steuerung des Rundens verwenden Sie die Funktionen von NumPy:

  • np.floor(): Rundet auf die nächste ganze Zahl ab.
  • np.ceil(): Rundet auf die nächste ganze Zahl auf.

Denken Sie daran, potenzielle Fehler (wie nicht-numerische Werte) mit dem Parameter errors in pd.to_numeric() zu behandeln. Die Wahl von 'coerce' ersetzt problematische Werte mit NaN und verhindert Fehler. Alternativ dazu löst 'raise' eine Ausnahme aus, und 'ignore' lässt nicht-numerische Werte unberührt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert