Использование индекса столбцов для масштабирования или других операций предварительной обработки не очень хорошая идея, поскольку каждый раз, когда вы создаете новую функцию, она нарушает код. Скорее используйте имена столбцов. например,
с использованием scikit-learn
:
from sklearn.preprocessing import StandardScaler, MinMaxScaler
features = [<featues to standardize>]
scalar = StandardScaler()
# the fit_transform ops returns a 2d numpy.array, we cast it to a pd.DataFrame
standardized_features = pd.DataFrame(scalar.fit_transform(df[features].copy()), columns = features)
old_shape = df.shape
# drop the unnormalized features from the dataframe
df.drop(features, axis = 1, inplace = True)
# join back the normalized features
df = pd.concat([df, standardized_features], axis= 1)
assert old_shape == df.shape, "something went wrong!"
или вы можете использовать функцию, подобную этой, если вы не предпочитаете разделять и объединять данные обратно.
import numpy as np
def normalize(x):
if np.std(x) == 0:
raise ValueError('Constant column')
return (x -np.mean(x)) / np.std(x)
for col in features:
df[col] = df[col].map(normalize)