【问题标题】:Imputer on some columns in a Dataframe对数据框中的某些列进行插补
【发布时间】:2019-02-22 09:15:18
【问题描述】:

我正在尝试在名为 age 的单列上使用 Imputer 来替换缺失值。但我收到错误为“预期的 2D 数组,得到 1D 数组:”

以下是我的代码

import pandas as pd
import numpy as np
from sklearn.preprocessing import Imputer

dataset = pd.read_csv("titanic_train.csv")

dataset.drop('Cabin',axis = 1,inplace = True)
x = dataset.drop('Survived',axis = 1)
y = dataset['Survived']

imputer = Imputer(missing_values ="nan",strategy = "mean",axis = 1)
imputer=imputer.fit(x['Age'])
x['Age']=imputer.transform(x['Age'])

【问题讨论】:

    标签: python pandas machine-learning scikit-learn imputation


    【解决方案1】:

    Imputer 期望一个二维数组作为输入,即使其中一个维度的长度为 1。这可以使用 np.reshape 来实现:

    imputer = Imputer(missing_values='NaN', strategy='mean')
    imputer.fit(x['Age'].values.reshape(-1, 1))
    x['Age'] = imputer.transform(x['Age'].values.reshape(-1, 1))
    

    也就是说,如果您没有做任何比用平均值填充缺失值更复杂的事情,您可能会发现完全跳过 Imputer 并改用 Pandas fillna 会更容易:

    x['Age'].fillna(x['Age'].mean(), inplace=True)
    

    【讨论】:

    • 谢谢 - fillna 也是一个不错的建议
    • 已解决问题。感谢您的帮助以及替代方法。
    【解决方案2】:

    当您适合对其进行转换时,请使用 reshape(-1,1)。因为方法需要一个 2D 数组作为输入,但您提供的是 1D 数组。

    例如:x['Age']=imputer.transform(x['Age'].reshape(-1,1))

    【讨论】:

      【解决方案3】:

      虽然@thesilkworkm 在路边击败了我,但了解您自己的代码到底为什么不起作用可能会很有用。

      所以,除了重塑问题之外,您的代码中还有两个错误;第一个是您错误地在您的估算器中请求axis=1,而您应该请求axis=0(这是默认值,这就是为什么它在完全省略时有效,如@thesilkworkm'a 答案);来自docs

      :整数,可选(默认=0)

      估算的轴。

      • 如果axis=0,则沿列插补。
      • 如果axis=1,则沿行插补。

      第二个错误是你的missing_values参数,应该是'NaN',而不是'nan';再次来自docs

      missing_values:整数或“NaN”,可选(默认=“NaN”)

      缺失值的占位符。所有出现的缺失值都将被估算。对于编码为 np.nan 的缺失值, 使用字符串值“NaN”。

      因此,只是为了提供一种替代但等效的解决方案(除了@thesilkworm 已经提供的解决方案),您还可以在一行中进行拟合和转换:

      imp = Imputer(missing_values ="NaN",strategy = "mean",axis = 0)
      x['Age'] = imp.fit_transform(x['Age'].reshape(-1,1))
      

      【讨论】:

        猜你喜欢
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        • 2013-09-05
        • 1970-01-01
        • 2022-08-20
        • 2018-10-31
        • 2014-11-01
        • 1970-01-01
        相关资源
        最近更新 更多