KeyError:使用StandardScaler()规范化多个特定列时出现“ [“]不在索引中”

时间:2020-07-29 16:30:45

标签: python scikit-learn normalization

使用StandartScaler()

尝试仅规范特定的数字列

检查了几个SO问题,但未能解决。

所有列都是浮点数或整数

cols_to_norm = ['A','B','C']

train_data[cols_to_norm] = StandardScaler().fit_transform(train_data[cols_to_norm])

KeyError: "['A'] not in index"

列A为float64。

当前DF

1 个答案:

答案 0 :(得分:1)

假设您的train_data确实有索引A(如果没有,那么它将无法正常工作)。

您使用的索引不正确。如果要选择多个列,则需要使用双括号语法(否则,列名称列表将被视为单独的参数)

train_data[[cols_to_norm]]

这是一个简单的例子。

data.csv

a,b,c
1,1,0
2,3,4
1,0,0

app.py

import pandas as pd
from sklearn.preprocessing import StandardScaler

df = pd.read_csv("./data.csv")
print(df.values)

# [[1 1 0]
#  [2 3 4]
#  [1 0 0]]

scaler = StandardScaler()

df[['a', 'b']] = scaler.fit_transform(df[['a', 'b']])
print(df)

#           a         b  c
# 0 -0.707107 -0.267261  0
# 1  1.414214  1.336306  4
# 2 -0.707107 -1.069045  0