2016-04-03 2 views
1

Я пытался использовать следующий код, чтобы нормализовать колонку в питона кадра данных:Python Dataframe: нормализовать числовой столбец с помощью лямбда

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

но получил следующее сообщение об ошибке:

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') 

ли кто-нибудь знаете, что я пропустил здесь? Благодаря!

+0

могли бы вы пожалуйста, предоставьте данные Пробный комплект (5-7 строк) и ожидаемый результат? – MaxU

ответ

0

Я предполагаю, что вы используете Pandas.

Вместо применения ко всей DataFrame применяйте (Documentation) только к серии «X», также вы должны предварительно вычислить значения среднего, максимального и минимального значений. Что-то вроде этого:

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

Если вы хотите, чтобы нормализовать весь чек DataFrame это answer:

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

Если вы хотите, чтобы нормализовать значения в столбце X:

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

Шаг за шаг:

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 

проверка:

In [70]: df.x_norm.sum() 
Out[70]: 1.0 
Смежные вопросы