数值错误:仅支持使用字符串指定 pandas DataFrame 的列。

7

我正在使用一个名为titanic.csv的数据集,尝试使用列传输和管道技术,在使用pipe.predict(x_test)时出现了错误。以下是我的代码。

titanic={'sex':['M','M','M','F','F','M','F','F','M','M'],
     'Pclass':[2,2,2,1,1,2,3,1,3,3],
     'age':[58,45,20,27,38,43,40,35,60,72],
     'embarked':['s','c','c','s','s','s','s','s','c','c'],
     'survived':[1,0,1,0,1,1,1,1,0,0]
    }
df=pd.DataFrame(data=titanic)
x=df.drop(['survived'],axis=1)
y=df.survived
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y)

col_tra_1=ColumnTransformer([
('trf1',SimpleImputer(),['Pclass','age'])
],remainder='passthrough')

col_tra_2=ColumnTransformer([
('ohe1',OneHotEncoder(sparse=False, handle_unknown='ignore'),['sex','embarked'])
],remainder='passthrough')

col_tra_3=ColumnTransformer([
    ('scale',MinMaxScaler(),['Pclass','age'])
],remainder='passthrough')


   model=DecisionTreeClassifier()
from sklearn.pipeline import Pipeline, make_pipeline
pipe = Pipeline([
    ('col_tra_1',col_tra_1),
    ('col_tra_2',col_tra_2),
    ('col_tra_3',col_tra_3),
    ('model',model)
])
   pipe.fit(x_train,y_train)

之后我遇到了一个错误:ValueError: 仅支持使用字符串指定pandas DataFrame的列。

如果我使用索引而不是列名,则会出现不同的错误:ValueError:无法在非数字数据中使用平均策略:无法将字符串转换为浮点数:“F”。

1个回答

4
问题在于您将一些转换器叠加在一起。转换器返回一个没有列的numpy数组,因此会出现错误。您可以通过删除两个转换器来验证它。 对我来说最简单的方法是使用索引而不是列名。 代码:
col_tra_1=ColumnTransformer([
('trf1',SimpleImputer(strategy='constant'),[0,1])
],remainder='passthrough')

col_tra_2=ColumnTransformer([
('ohe1',OneHotEncoder(sparse=False, handle_unknown='ignore'),[0,3])
],remainder='passthrough')

col_tra_3=ColumnTransformer([
    ('scale',MinMaxScaler(),[0,1])
],remainder='passthrough')

输出:

Pipeline(steps=[('col_tra_1',
                 ColumnTransformer(remainder='passthrough',
                                   transformers=[('trf1',
                                                  SimpleImputer(strategy='constant'),
                                                  [0, 1])])),
                ('col_tra_2',
                 ColumnTransformer(remainder='passthrough',
                                   transformers=[('ohe1',
                                                  OneHotEncoder(handle_unknown='ignore',
                                                                sparse=False),
                                                  [0, 3])])),
                ('col_tra_3',
                 ColumnTransformer(remainder='passthrough',
                                   transformers=[('scale', MinMaxScaler(),
                                                  [0, 1])])),
                ('model', DecisionTreeClassifier())])

使用索引后,我遇到了不同的错误:ValueError:无法对非数字数据使用平均策略: 无法将字符串转换为浮点数:“F” - Anubhav
非常感谢你,伙计,现在它正在运行。你节省了我的时间。 - Anubhav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接