Normalisieren einer Spalte in einem Pandas Dataframe

Sathiya Sarathi 10 Oktober 2023
  1. Datennormalisierung in Pandas
  2. Normalisieren von Pandas Dataframe mit der mean Normalisierung
  3. Normalisieren von Pandas Dataframe mit der min-max Normalisierung
  4. Pandas Dataframe mit der Quantil-Normalisierung normalisieren
Normalisieren einer Spalte in einem Pandas Dataframe

Die Standardisierung oder Normalisierung von Daten ist der erste Schritt des Feature Engineering. Bei der Normalisierung der Spalten geht es darum, die Werte der Spalten auf eine gemeinsame Skala zu bringen, was meist bei Spalten mit unterschiedlichen Bereichen geschieht. In Pandas können die Spalten von Dataframes durch eine Vielzahl von Funktionen normalisiert werden. Dieser Artikel wird Ihnen helfen, diese Funktionen zu üben und die Funktionen in den richtigen Situationen anzuwenden.

Datennormalisierung in Pandas

Es gibt zwei weit verbreitete Methoden zur Datennormalisierung.

  • Mittelwert-Normalisierung
  • Min-Max-Normalisierung
  • Quantil-Normalisierung

Es gibt keine spezifischen Methoden in Pandas, um eine Datennormalisierung durchzuführen. Wir werden erklären, was diese Normalisierungen sind und wie sie mit Hilfe von nativen Pandas und ein wenig von den nativen Python-Funktionen implementiert werden können.

Wir werden das folgende Snippet überall verwenden, um einen Dataframe mit zufälligen Elementen wie unten zu erstellen.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(-100, 100, size=(20, 4)), columns=list("ABCD"))
print(df)

Es wird ein ähnlicher Dataframe wie unten angegeben zurückgegeben.

     A   B   C   D
0   72 -53  17  92
1  -33  95   3 -91
2  -79 -64 -13 -30
3  -12  40 -42  93
4  -61 -13  74 -12
5  -19  65 -75 -23
6  -28 -91  48  15
7   97 -21  75  92
8  -18  -1  77 -71
9   47  47  42  67
10 -68  93 -91  85
11  27 -68 -69  51
12  63  14  83 -72
13 -66  28  28  64
14 -47  33 -62 -83
15 -21  32   5 -58
16  86 -69  20 -99
17 -35  69 -43 -65
18   2  19 -89  74
19 -18  -9  28  42

[20 rows x 4 columns]

Normalisieren von Pandas Dataframe mit der mean Normalisierung

Die Mittelwert-Normalisierung ist eine der einfachsten Methoden, um Dataframes mit unterschiedlichen Bereichen zu normalisieren. Die Normalisierung wird durchgeführt, indem der Mittelwert subtrahiert und durch die Standardabweichung für alle Elemente des Dataframes geteilt wird.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(-100, 100, size=(20, 4)), columns=list("ABCD"))


def mean_norm(df_input):
    return df_input.apply(lambda x: (x - x.mean()) / x.std(), axis=0)


df_mean_norm = mean_norm(df)
print(df_mean_norm)

Ausgabe:

           A         B         C         D
0   1.452954 -1.090261  0.278088  1.247208
1  -0.514295  1.585670  0.037765 -1.333223
2  -1.376137 -1.289148 -0.236890 -0.473079
3  -0.120845  0.591236 -0.734701  1.261309
4  -1.038895 -0.367037  1.256545 -0.219266
5  -0.251995  1.043252 -1.301176 -0.374374
6  -0.420617 -1.777325  0.810231  0.161453
7   1.921346 -0.511681  1.273711  1.247208
8  -0.233260 -0.150069  1.308043 -1.051208
9   0.984561  0.717801  0.707236  0.894690
10 -1.170045  1.549509 -1.575831  1.148503
11  0.609847 -1.361470 -1.198181  0.669079
12  1.284333  0.121140  1.411038 -1.065309
13 -1.132573  0.374269  0.466913  0.852388
14 -0.776595  0.464672 -1.078020 -1.220417
15 -0.289467  0.446591  0.072097 -0.867899
16  1.715254 -1.379551  0.329586 -1.446028
17 -0.551766  1.115574 -0.751867 -0.966604
18  0.141455  0.211543 -1.541499  0.993395
19 -0.233260 -0.294714  0.466913  0.542172

Wenn Sie ein Jupyter-Notebook verwenden, können die beiden Dataframes mit Matplotlib visualisiert werden, wie im folgenden Code gezeigt.

# %matplotlib inline
df["A"].plot(kind="bar")

Wenn Sie die Spalte A des Dataframes vor der Normalisierung auswählen und daraus ein Balkendiagramm visualisieren, sehen Sie, dass die y-Achse Werte im Bereich von -100 bis 100 enthält.

Mittelwertnormalisierung - vor der Normalisierung

# %matplotlib inline
df_mean_norm["A"].plot(kind="bar")

Die folgende Abbildung zeigt die Daten nach der Normalisierung; wenn dieselbe Spalte visualisiert wird, liegt die y-Achse im Bereich von -1,5 bis +1,5.

Mittelwertnormalisierung - Nach der Normalisierung

Normalisieren von Pandas Dataframe mit der min-max Normalisierung

Dies ist eine der am häufigsten verwendeten Methoden zur Normalisierung. Die Ausgabe der Normalisierung subtrahiert den Minimalwert eines Dataframes und dividiert ihn durch die Differenz zwischen dem höchsten und dem niedrigsten Wert der entsprechenden Spalte.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(-100, 100, size=(20, 4)), columns=list("ABCD"))


def minmax_norm(df_input):
    return (df - df.min()) / (df.max() - df.min())


df_minmax_norm = minmax_norm(df)

print(df_minmax_norm)

Ausgabe:

           A         B         C         D
0   0.857955  0.204301  0.620690  0.994792
1   0.261364  1.000000  0.540230  0.041667
2   0.000000  0.145161  0.448276  0.359375
3   0.380682  0.704301  0.281609  1.000000
4   0.102273  0.419355  0.948276  0.453125
5   0.340909  0.838710  0.091954  0.395833
6   0.289773  0.000000  0.798851  0.593750
7   1.000000  0.376344  0.954023  0.994792
8   0.346591  0.483871  0.965517  0.145833
9   0.715909  0.741935  0.764368  0.864583
10  0.062500  0.989247  0.000000  0.958333
11  0.602273  0.123656  0.126437  0.781250
12  0.806818  0.564516  1.000000  0.140625
13  0.073864  0.639785  0.683908  0.848958
14  0.181818  0.666667  0.166667  0.083333
15  0.329545  0.661290  0.551724  0.213542
16  0.937500  0.118280  0.637931  0.000000
17  0.250000  0.860215  0.275862  0.177083
18  0.460227  0.591398  0.011494  0.901042
19  0.346591  0.440860  0.683908  0.734375

In der obigen Ausgabe können wir ableiten, dass der kleinste Wert jeder Spalte in 0 umgewandelt wird und der größte Wert in jeder Spalte in 1 umgewandelt wird.

Die Spalte A für diese Normalisierung wird wie unten gezeigt visualisiert.

# %matplotlib inline
df_minmax_norm["A"].plot(kind="bar")

Min-Max-Normalisierung - nach der Normalisierung

Obwohl dies für eng beieinander liegende Dataframes gut ist, ist die MinMax-Normalisierung möglicherweise nicht für Dataframes mit vielen Ausreißern geeignet.

Pandas Dataframe mit der Quantil-Normalisierung normalisieren

Die Quantil-Normalisierung wird bei hochdimensionalen Datenanalysen verwendet. Sie beobachtet und nimmt an, dass die statistische Verteilung jeder Spalte ein und dieselbe ist. Die Quantil-Normalisierung besteht aus den folgenden Schritten:

  1. Ordnung der Werte innerhalb jeder Spalte (Rangfolge)
  2. Durchschnitt über jede Zeile bilden und den Wert jedes Elements in der Zeile durch den Durchschnitt ersetzen
  3. Ordnen Sie die Werte wieder in der ursprünglichen Reihenfolge an.
import numpy as np
import pandas as pd

np.random.seed(0)

df = pd.DataFrame(np.random.randint(-100, 100, size=(20, 4)), columns=list("ABCD"))


def quantile_norm(df_input):
    sorted_df = pd.DataFrame(
        np.sort(df_input.values, axis=0), index=df_input.index, columns=df_input.columns
    )
    mean_df = sorted_df.mean(axis=1)
    mean_df.index = np.arange(1, len(mean_df) + 1)
    quantile_df = df_input.rank(method="min").stack().astype(int).map(mean_df).unstack()
    return quantile_df


df_quantile_norm = quantile_norm(df)

print(df_quantile_norm)

Ausgabe:

        A      B      C      D
0   77.00 -58.25   8.25  77.00
1  -36.50  92.00 -10.50 -79.25
2  -90.00 -66.50 -20.00 -20.00
3   24.75  44.00 -36.50  92.00
4  -66.50 -36.50  71.75  -3.00
5   -3.00  71.75 -73.00 -10.50
6  -20.00 -90.00  54.00   8.25
7   92.00 -41.00  77.00  77.00
8    8.25 -10.50  87.00 -58.25
9   54.00  54.00  44.00  44.00
10 -79.25  87.00 -90.00  71.75
11  44.00 -73.00 -66.50  24.75
12  71.75  -3.00  92.00 -66.50
13 -73.00  18.00  24.75  31.75
14 -58.25  31.75 -58.25 -73.00
15 -10.50  24.75  -3.00 -36.50
16  87.00 -79.25  18.00 -90.00
17 -41.00  77.00 -41.00 -41.00
18  31.75   8.25 -79.25  54.00
19   8.25 -20.00  24.75  18.00

Die Ausgabe für die Quantilsnormalisierung kann für Spalte A wie unten gezeigt visualisiert werden.

Quantilnormalisierung - nach der Normalisierung

Verwandter Artikel - Pandas DataFrame

Verwandter Artikel - Pandas DataFrame Column