我的熊猫数据框如下。
import pandas as pd
df = pd.DataFrame({
'A':[1,2,3],
'B':[100,300,500],
'C':list('abc')
})
print(df)
A B C
0 1 100 a
1 2 300 b
2 3 500 c
我想规范化整个数据框。由于第C
列不是带编号的列,我的工作如下(即首先删除C
,对数据进行规范化并添加该列)。
df_new = df.drop('concept', axis=1)
df_concept = df[['concept']]
from sklearn import preprocessing
x = df_new.values #returns a numpy array
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df_new = pd.DataFrame(x_scaled)
df_new['concept'] = df_concept
但是,我确信在熊猫中有一种更简单的方法(考虑到我不需要进行标准化的列名,然后直接进行标准化)。
如果需要,我很乐意提供更多详细信息。
答案 0 :(得分:1)
将DataFrame
的{{3}}用于数字列,然后除以最小值和最大值进行归一化,然后只分配归一化的列:
df1 = df.select_dtypes(np.number)
df[df1.columns]=(df1-df1.min())/(df1.max()-df1.min())
print (df)
A B C
0 0.0 0.0 a
1 0.5 0.5 b
2 1.0 1.0 c
答案 1 :(得分:1)
如果要在数据框上应用任何其他功能,可以使用df[columns] = df[columns].apply(func)
。