Python数据帧:使用lambda规范化数字列

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

我尝试使用以下代码规范化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')

有人知道我错过了什么吗?谢谢

我假设您正在使用熊猫

除了应用于整个数据帧外,还应预先计算平均值、最大值和最小值。大概是这样的:

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