Handling Categorical Data: Label Encoding

Most ML algorithms require numeric input, so categorical text columns must be encoded as numbers. Label encoding maps each unique category to an integer — a simple approach that works well for ordinal data but can mislead models into assuming an order that doesn't exist.


LabelEncoder for Target Variables

sklearn's LabelEncoder is designed primarily for encoding the target variable (y). It maps classes to integers 0, 1, 2, … alphabetically or by first appearance.

Using LabelEncoder

<pre><code class="language-python">from sklearn.preprocessing import LabelEncoder le = LabelEncoder() y_train_enc = le.fit_transform(y_train) # e.g. ['cat','dog','fish'] -> [0,1,2] y_test_enc = le.transform(y_test) print(le.classes_) # original class names print(le.inverse_transform([0, 2])) # decode back</pre>

OrdinalEncoder for Features

OrdinalEncoder is the correct tool for encoding ordinal feature columns (e.g., Education: high school < bachelor < master < PhD). It handles multiple columns at once and lets you specify a custom category order.

Encoding Ordinal Features

<pre><code class="language-python">from sklearn.preprocessing import OrdinalEncoder enc = OrdinalEncoder( categories=[["low", "medium", "high"]] ) X_train[["risk_level"]] = enc.fit_transform(X_train[["risk_level"]]) X_test[["risk_level"]] = enc.transform(X_test[["risk_level"]])</pre>

When NOT to Use Label Encoding

For nominal categories (colors, cities, product names) with no inherent order, label encoding imposes a false numerical relationship — the model may infer that "Paris" (1) is closer to "London" (2) than to "Tokyo" (0). Use One-Hot Encoding instead for such features.