Python数据帧:使用lambda规范化数字列
我尝试使用以下代码规范化python数据帧中的列:Python数据帧:使用lambda规范化数字列,python,lambda,dataframe,Python,Lambda,Dataframe,我尝试使用以下代码规范化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) AttributeErr
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')
有人知道我错过了什么吗?谢谢 我假设您正在使用熊猫 除了应用于整个数据帧外,还应预先计算平均值、最大值和最小值。大概是这样的:
avg = df['X'].mean()
diff = df['X'].max() - df['X'].min()
new_df = df['X'].apply(lambda x: (x-avg)/diff)
如果希望规范化整个数据帧,请检查以下内容:
如果要规范化列
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
您能提供一个样本数据集(5-7行)和预期输出吗?
In [70]: df.x_norm.sum()
Out[70]: 1.0