Normalisieren einer Spalte in einem Pandas Dataframe
- Datennormalisierung in Pandas
-
Normalisieren von Pandas Dataframe mit der
mean
Normalisierung -
Normalisieren von Pandas Dataframe mit der
min-max
Normalisierung -
Pandas Dataframe mit der
Quantil
-Normalisierung normalisieren
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.
# %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.
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")
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:
- Ordnung der Werte innerhalb jeder Spalte (Rangfolge)
- Durchschnitt über jede Zeile bilden und den Wert jedes Elements in der Zeile durch den Durchschnitt ersetzen
- 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.
Verwandter Artikel - Pandas DataFrame
- Wie man Pandas DataFrame-Spaltenüberschriften als Liste erhält
- Pandas DataFrame-Spalte löschen
- Wie man DataFrame-Spalte in Datetime in Pandas konvertiert
- Wie konvertiert man eine Fließkommazahl in eine Ganzzahl in Pandas DataFrame
- Wie man Pandas-DataFrame nach den Werten einer Spalte sortiert
- Wie erhält man das Aggregat der Pandas gruppenweise und sum
Verwandter Artikel - Pandas DataFrame Column
- Wie man Pandas DataFrame-Spaltenüberschriften als Liste erhält
- Pandas DataFrame-Spalte löschen
- Wie man DataFrame-Spalte in Datetime in Pandas konvertiert
- So erhalten Sie die Summe der Pandas-Spalte
- Wie man die Reihenfolge der Pandas DataFrame-Spalten ändert
- Wie man eine DataFrame-Spalte in eine Zeichenkette in Pandas konvertiert