【问题标题】:ValueError in creating submission csv创建提交 csv 时出现 ValueError
【发布时间】:2017-09-27 05:18:17
【问题描述】:

我正在学习数据科学并阅读其他人的脚本。有一个泰坦尼克算法(kaggle)有这个代码来应用逻辑回归,然后按照代码中的建议导出到 .csv 文件。但是,在我运行代码后,它总是会生成一条错误消息。原始脚本位于here,正在读入代码的 .csv 数据位于:train.csvtest.csv

从 Input[24] 到 Input[28] 用于设置 LogisticRegression。直到 Input[27] 代码仍然运行没有错误。运行 Input[28] 时:

    acc_log = predict_model(X_data, Y_data, logreg, X_test_kaggle, 'submission_Logistic.csv')

我收到一条错误消息:

    ValueError: could not convert string to float: 'Q'

我尝试添加“try/except”以绕过错误消息,以便代码可以继续。

    try:
        acc_log = predict_model(X_data, Y_data, logreg, X_test_kaggle, 'submission_Logistic.csv')
    except ValueError:
        pass

这段代码对我来说有点过于复杂,无法调试以查看哪个步骤出错以及文件中的哪个位置有字符串代替所需的浮点输入。因此,我想在这里寻求帮助,以更好地理解这一点并寻求适当的解决方案。谢谢。

【问题讨论】:

  • 请发布数据集和 predict_model() 函数的 sn-p,没有这些,几乎无法分辨。但很明显,您将一个字符串传递给一个期望浮点数的函数。
  • 嗨@pshep123 感谢您的意见。我已经编辑了问题并添加了参考资料。我不确定我应该复制和粘贴代码和数据集的哪一部分,所以我在这里列出了参考。

标签: csv pandas kaggle sklearn-pandas


【解决方案1】:

看起来您没有在您提供的笔记本链接中运行单元格 16,其中 Embarked 值被转换为整数(包括字符串值 Q,这会引发您看到的错误):

16号电池

# fill the missing values of Embarked feature with the most common occurance
freq_port = train_df.Embarked.dropna().mode()[0]
for dataset in combine:
    dataset['Embarked'] = dataset['Embarked'].fillna(freq_port)
train_df[['Embarked', 'Survived']].groupby(['Embarked'], as_index=False).mean().sort_values(by='Survived', ascending=False)

for dataset in combine:
    dataset['Embarked'] = dataset['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2} ).astype(int)

train_df.head()

我只是按顺序运行了所有单元格,LogisticRegression 部分对我来说效果很好。尝试关闭您的笔记本并按照它们出现的顺序重新运行所有单元格。

一般数据科学提示:
当您已经训练了一个模型但您的 predict() 函数抛出错误时,查看您输入的测试数据并尝试找出其中的问题会很有帮助。
在这种情况下,在X_test_kaggle 中搜索字符串Q 的值可能会发现问题出在Embarked 字段上,这可以作为将问题追溯到其根源的第一个面包屑。

【讨论】:

  • 谢谢@andrew_reece!我检查了代码,我的输入在本节中缺少一行。我试着用手输入东西,所以在没有注意到的情况下滑倒了。很好的收获,也感谢您与我分享您的经验:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 2019-05-21
  • 2019-05-12
相关资源
最近更新 更多