2016-04-03 7 views
1

Ich habe versucht, den folgenden Code zu verwenden, um eine Spalte in Python-Datenrahmen zu normalisieren:Python Datenrahmen: normalisieren eine numerische Spalte Lambda mit

df['x_norm'] = df.apply(lambda x: (x['X'] - x['X'].mean())/(x['X'].max() - x['X'].min()),axis=1) 

bekam aber den folgenden Fehler:

df['x_norm'] = df.apply(lambda x: (x['X'] - x['X'].mean())/(x['X'].max() - x['X'].min()),axis=1) 
AttributeError: ("'float' object has no attribute 'mean'", u'occurred at index 0') 

niemanden Weißt du was ich hier verpasst habe? Vielen Dank!

+0

könnten Sie bitte einen Beispieldatensatz (5-7 Zeilen) und erwartete Ausgabe zur Verfügung stellen? – MaxU

Antwort

0

Ich nehme an, Sie verwenden Pandas.

Anstatt auf den gesamten DataFrame anzuwenden (Documentation) nur auf die Serie 'X', sollten Sie auch die Mittelwerte, Max und Minwerte vorberechnen. Etwas wie folgt aus:

avg = df['X'].mean() 
diff = df['X'].max() - df['X'].min() 
new_df = df['X'].apply(lambda x: (x-avg)/diff) 

Wenn Sie schauen, um die gesamte Datenrahmen Check diese answer zu normalisieren:

df.apply(lambda x: (x - np.mean(x))/(np.max(x) - np.min(x))) 
0

Wenn Sie in der Spalte X normalisieren Werte wollen:

df['x_norm'] = df.X.div(df.X.sum()) 

Schritt Schritt:

In [65]: df 
Out[65]: 
    a b X 
0 2 1 5 
1 1 4 5 
2 7 4 7 
3 1 6 6 
4 5 5 8 
5 5 8 2 
6 6 7 5 
7 8 2 5 
8 7 9 9 
9 9 6 5 

In [68]: df['x_norm'] = df.X.div(df.X.sum()) 

In [69]: df 
Out[69]: 
    a b X x_norm 
0 2 1 5 0.087719 
1 1 4 5 0.087719 
2 7 4 7 0.122807 
3 1 6 6 0.105263 
4 5 5 8 0.140351 
5 5 8 2 0.035088 
6 6 7 5 0.087719 
7 8 2 5 0.087719 
8 7 9 9 0.157895 
9 9 6 5 0.087719 

Kontrolle:

In [70]: df.x_norm.sum() 
Out[70]: 1.0 
Verwandte Themen