对除熊猫中的一列以外的所有列应用标准化

时间:2020-07-20 14:35:50

标签: python pandas dataframe

我在pandas中有一个DataFrame,并且想对除用作主键之外的所有值进行标准化。是否有任何简单的方法可以通过这种方式使用apply()函数或任何其他魔术技巧?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用循环和条件语句。

这是一个虚构DataFrame的示例:

df = pd.DataFrame(randn(10,5),columns='A B C D E'.split())
print(df)

          A         B         C         D         E
0  0.187125 -0.732845 -1.382920  1.482495  0.961458
1 -2.141212  0.992573  1.192241 -1.046780  1.292765
2 -1.467514 -0.494095 -0.162535  0.485809  0.392489
3  0.221491 -0.855196  1.541990  0.666319 -0.538235
4 -0.568581  1.407338  0.641806 -0.905100 -0.391157
5  1.028293 -1.972605 -0.866885  0.720788 -1.223082
6  1.606780 -1.115710 -1.385379 -1.329660  0.041460
7 -0.411055 -0.771329  0.110477 -0.804652  0.253548
8  0.649148  0.358941 -1.080471  0.902398  0.161781
9  0.833029  0.975720 -0.388239  0.783316 -0.708954

for col in df.columns:
    if col == 'A':
        pass
    else:
        df[col] = df[col].apply(lambda x:x+10)
print(df)

          A          B          C          D          E
0  0.187125   9.267155   8.617080  11.482495  10.961458
1 -2.141212  10.992573  11.192241   8.953220  11.292765
2 -1.467514   9.505905   9.837465  10.485809  10.392489
3  0.221491   9.144804  11.541990  10.666319   9.461765
4 -0.568581  11.407338  10.641806   9.094900   9.608843
5  1.028293   8.027395   9.133115  10.720788   8.776918
6  1.606780   8.884290   8.614621   8.670340  10.041460
7 -0.411055   9.228671  10.110477   9.195348  10.253548
8  0.649148  10.358941   8.919529  10.902398  10.161781
9  0.833029  10.975720   9.611761  10.783316   9.291046

只需用您的标准化函数替换lambda表达式即可。如果需要多次使用此循环,也可以将其转换为函数。

答案 1 :(得分:2)

这是使用sklearn standardscaler的一种方式:

# sample data frame
df = pd.DataFrame(np.random.randn(10,5),columns='A B C D E'.split())

# except B, take all columns
cols = df.columns.difference(['B'])

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()

# normalise only selected columns
df[cols] = sc.fit_transform(df[cols])

print(df)

          A         B         C         D         E
0  1.194423 -0.701723  0.970902  1.476101 -0.689705
1  0.724548  0.676402 -0.469411 -0.422186  0.699812
2 -0.265348  0.440215 -0.315499  0.793704 -0.102904
3  0.716021 -0.278853 -1.578935  0.301908  1.852059
4  0.678427 -0.455048 -1.809499 -0.444824 -2.030400
5 -0.648249 -0.356934  1.087229 -0.025742 -0.380731
6  0.266930 -2.490469  0.372445 -1.210393  0.034839
7 -2.549062 -0.131447  0.810261  1.617697  0.956586
8  0.007891  0.312460  0.994482 -1.525312 -0.589574
9 -0.125581 -0.935009 -0.061977 -0.560953  0.250017

您可以使用sklearn preprocessing模块中的任何缩放方法。