我尝试使用以下代码来规范化python数据框中的列:
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 :(得分:1)
我假设你正在使用 Pandas 。
您应该预先计算平均值,最大值和最小值,而不是将整个数据帧应用于(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)))
答案 1 :(得分: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