2017-06-19 5 views
1

ich den folgenden Code bin mit einem Pandas Datenrahmen zu normalisieren:Pandas: string Spalten ignorieren, während Normalisierung tun

df_norm = (df - df.mean())/(df.max() - df.min()) 

Dies funktioniert gut, wenn alle Spalten numerisch sind. Allerdings habe ich jetzt einige String-Spalten in df und die obige Normalisierung hat Fehler. Gibt es eine Möglichkeit, eine solche Normalisierung nur für numerische Spalten eines Datenrahmens durchzuführen (die String-Spalte bleibt unverändert)? Vielen Dank!

Antwort

2

Sie können select_dtypes verwenden Wert für die gewünschten Spalten zu berechnen:

df = pd.DataFrame({'a': [1, 2, 3], 'b': ['a', 'b', 'c'], 'c': [4, 5, 6]}) 

df 

    a b c 
0 1 a 4 
1 2 b 5 
2 3 c 6 

df_num = df.select_dtypes(include=[np.number]) 

df_num 

    a c 
0 1 4 
1 2 5 
2 3 6 

Und dann kann man sie wieder auf den ursprünglichen df zuordnen:

df_norm = (df_num - df_num.mean())/(df_num.max() - df_num.min()) 


df[df_norm.columns] = df_norm 

df 

    a b c 
0 -0.5 a -0.5 
1 0.0 b 0.0 
2 0.5 c 0.5 
+0

Haben Sie Ihre Antwort nicht, wie ich war schreib mir. Kann bei Bedarf löschen, nicht sicher, was das Protokoll ist. – LateCoder

+0

schau dir meine Antwort an und adressiere den einen Mangel in deiner Antwort. Nämlich, dass Sie alle numerischen Typen mit np.number abdecken können. – piRSquared

Verwandte Themen