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

Python 如何规范化数据帧中一系列列中的数据,python,pandas,Python,Pandas,假设我有一个熊猫数据框surveyData: 我希望通过执行以下操作来规范化每列中的数据: surveyData_norm = (surveyData - surveyData.mean()) / (surveyData.max() - surveyData.min()) 如果我的数据表只包含我想要规范化的列,那么这将很好地工作。但是,我有一些列包含前面的字符串数据,如: Name State Gender Age Income Height Sam CA M

假设我有一个熊猫数据框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

我只想规范化年龄、收入和身高列,但由于名称状态和性别列中的字符串数据,上述方法不起作用。

您可以通过多种方式对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()))
这将仅将其应用于所需的列,并将结果分配回这些列。或者,您可以将它们设置为新的、规范化的列,并保留原始列(如果需要)


…简单的方法和更高效的方法:
预计算平均值:
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 ))

这种方法会奏效…

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

from sklearn.preprocessing import StandardScaler
cols_to_norm = ['Age','Height']
surveyData[cols_to_norm] = StandardScaler().fit_transform(surveyData[cols_to_norm])
将熊猫作为pd导入
将numpy作为np导入
#这里是您的数据集#
从sklearn.preprocessing导入MinMaxScaler
minmax=MinMaxScaler()
对于dataset.columns[dataset.dtypes=='int64']中的x:
数据集[x]=minmax.fit_变换(np.array(数据集[I])。重塑(-1,1))

你不能用try:。。。。除ValueError外:。。。。。。图案可以对字符串列传递规范化函数。不过,可能还有更多“泛泛”的方法。阅读此答案的人要小心,规范化的公式是错误的。在
lambda
函数中,
平均值应更改为
min
。如果您所追求的是特征缩放每列[0,1],那么,正如@Amin所说,使用(x-x.min())/(x.max()-x.min())作为公式