如何规范化我的pandas数据帧中的一系列列中的数据

Jer*_*emy 18 python pandas

假设我有一个pandas数据框surveyData:

我想通过执行以下操作来规范化每列中的数据:

surveyData_norm = (surveyData - surveyData.mean()) / (surveyData.max() - surveyData.min())
Run Code Online (Sandbox Code Playgroud)

如果我的数据表只包含我想要规范化的列,这将正常工作.但是,我有一些列包含前面的字符串数据,如:

Name  State  Gender  Age  Income  Height
Sam   CA     M        13   10000    70
Bob   AZ     M        21   25000    55
Tom   FL     M        30   100000   45
Run Code Online (Sandbox Code Playgroud)

我只想规范Age,Income和Height列,但我的上述方法不起作用,因为名称状态和性别列中的字符串数据.

cwh*_*and 25

您可以通过多种方式对pandas中的一组子行或列进行操作.一种有用的方法是索引:

# Assuming same lines from your example
cols_to_norm = ['Age','Height']
survey_data[cols_to_norm] = survey_data[cols_to_norm].apply(lambda x: (x - x.min()) / (x.max() - x.min()))
Run Code Online (Sandbox Code Playgroud)

这将仅将其应用于您想要的列,并将结果分配回这些列.或者,您可以将它们设置为新的标准化列,并根据需要保留原始列.

.....

  • 读这个答案的人要小心,规范化的公式是错误的.`mean`应该在`lambda`函数中改为`min`. (4认同)
  • 是的。如果您所追求的是特征缩放每列 [0,1] 那么,正如@Amin 所说,使用 (x - x.min()) / (x.max() - x.min()) 作为公式 (2认同)

Yar*_*ron 6

我认为在这种情况下最好使用“sklearn.preprocessing”,它可以为我们提供更多的缩放选项。在您使用 StandardScaler 的情况下,这样做的方法是:

from sklearn.preprocessing import StandardScaler
cols_to_norm = ['Age','Height']
surveyData[cols_to_norm] = StandardScaler().fit_transform(surveyData[cols_to_norm])
Run Code Online (Sandbox Code Playgroud)