【问题标题】:Simple Imputer cannot impute by column简单估算器不能按列估算
【发布时间】:2020-06-10 12:09:56
【问题描述】:

我有 X_train 的形状 (14599, 13),我试图用列的中位数估算 NaN,但不知何故,它用行结果错误估算,因为在一行中有日期,而不是整数值。如果 SimpleImputer 具有轴参数,我已经查找但找不到它存在。如何解决这个问题?

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split


plt.close('all')
avo_sales = pd.read_csv('avocados.csv')
avo_sales.rename(columns = {'4046':'small PLU sold',
                            '4225':'large PLU sold',
                            '4770':'xlarge PLU sold'},
                 inplace= True)
avo_sales.columns = avo_sales.columns.str.replace(' ','')

plt.scatter(avo_sales.Date,avo_sales.TotalBags)

x = np.array(avo_sales.drop(['TotalBags'],1))
y = np.array(avo_sales.TotalBags)

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

imp = SimpleImputer(strategy='median')
X_train = imp.fit_transform(X_train)

输出

ValueError: Cannot use median strategy with non-numeric data:
could not convert string to float: '12/31/2017'

【问题讨论】:

    标签: python numpy machine-learning imputation


    【解决方案1】:

    也许在估算时尝试删除日期列:

    X_train = imp.fit_transform(X_train.drop('date_column', axis=1)
    

    将名称“date_column”更改为正确的名称。

    否则可能会将带有日期列的列从字符串转换为日期对象:

    X_train['date_column'] = pd.to_datetime(X_train['date_column'])
    

    但我不确定 SimpleImputer 是否可以处理日期类型

    【讨论】:

    • 这在这里不起作用,因为 X_trainX_test 实际上是 Numpy 数组(没有 drop 方法)而不是 pandas 数据帧(有)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2019-04-19
    • 2020-11-03
    • 1970-01-01
    • 2017-08-08
    • 2019-05-19
    • 2020-08-20
    相关资源
    最近更新 更多