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