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

时间:2015-02-18 05:24:04

标签: python pandas

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

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

surveyData_norm = (surveyData - surveyData.mean()) / (surveyData.max() - surveyData.min())

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

Name  State  Gender  Age  Income  Height
Sam   CA     M        13   10000    70
Bob   AZ     M        21   25000    55
Tom   FL     M        30   100000   45

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

4 个答案:

答案 0 :(得分:20)

您可以通过多种方式对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()))

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

.....

答案 1 :(得分:2)

简单的方式和方式更有效:
预先计算平均值:
dropna()避免丢失数据。

mean_age = survey_data.Age.dropna().mean()
max_age = survey_data.Age.dropna().max()
min_age = survey_data.Age.dropna().min()

dataframe['Age'] = dataframe['Age'].apply(lambda x: (x - mean_age ) / (max_age -min_age ))
这种方式会起作用......

答案 2 :(得分:2)

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

from sklearn.preprocessing import StandardScaler
cols_to_norm = ['Age','Height']
surveyData[cols_to_norm] = StandardScaler().fit_transform(surveyData[cols_to_norm])

答案 3 :(得分:-1)

import pandas as pd
import numpy as np
# let Dataset here be your data#

from sklearn.preprocessing import MinMaxScaler
minmax = MinMaxScaler()

for x in dataset.columns[dataset.dtypes == 'int64']:
    Dataset[x] = minmax.fit_transform(np.array(Dataset[I]).reshape(-1,1))