【问题标题】:Using StandardScaler for multiple columns对多列使用 StandardScaler
【发布时间】:2022-04-26 13:50:07
【问题描述】:

我只想在某些列上使用 StandardScaler,但是我的代码导致了错误。这是我的代码:

from sklearn.preprocessing import StandardScaler
num_cols = ['fare_amount','trip_distance','jfk_drop_distance','lga_drop_distance','ewr_drop_distance','met_drop_distance','wtc_drop_distance']
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df[num_cols])
scaled_data

输出:

KeyError: "['trip_distance', 'jfk_drop_distance', 'lga_drop_distance', 'ewr_drop_distance', 'met_drop_distance', 'wtc_drop_distance'] not in index"

【问题讨论】:

  • 好像没有列..

标签: python scikit-learn feature-engineering


【解决方案1】:

您的 DF 似乎没有轴中的列。确保名称正确。

如果列的名称正确,您将丢失 DataFrame 并通过运行此代码获得一个数组。您必须将数组更改为数据框或使用 for 循环缩放列。

# Convert to dataframe
from sklearn.preprocessing import StandardScaler
num_cols = [
    'fare_amount',
    'trip_distance',
    'jfk_drop_distance',
    'lga_drop_distance',
    'ewr_drop_distance',
    'met_drop_distance',
    'wtc_drop_distance'
]
scaler = StandardScaler()
scaled_data = pd.DataFrame(scaler.fit_transform(df[num_cols]), columns = df.columns)

或者,尝试使用 for 循环,我觉得这更容易:

from sklearn.preprocessing import StandardScaler
num_cols = [
    'fare_amount',
    'trip_distance',
    'jfk_drop_distance',
    'lga_drop_distance',
    'ewr_drop_distance',
    'met_drop_distance',
    'wtc_drop_distance'
]
scaler = StandardScaler()

#for loop
for col in num_cols:
    df[col] = scaler.fit_transform(df[[col]])

请务必在缩放器对象中使用第二个“[”,因为 StandarScaler 要求其输入为二维数组。不使用会导致:

ValueError: Expected 2D array, got 1D array instead 

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 2018-05-11
    • 2021-08-08
    • 2020-11-06
    • 1970-01-01
    • 2019-08-31
    • 2019-05-21
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多