【问题标题】:How to avoid the error: could not convert string to float如何避免错误:无法将字符串转换为浮点数
【发布时间】:2020-06-20 20:08:20
【问题描述】:

我的目标是生成一个将文本分割成句子的模型。 我有一个包含 24 列的数据集(xlsx):第一列用于实例(单词)、22 个特征,最后一列包含类。只有第一列是字符串,其余都是整数。

我的代码:

dataset = pd.read_excel('File_xlsx', header=0, dtype=str)
testdataset = pd.read_excel('file_xlsx', header=0, dtype=str)

# Split-out validation dataset
array = dataset.values
testarray = dataset.values
X_train = array[1:-1]
Y_train = array[:,22]

X_test = testarray[1:-1]
Y_test = testarray[:,22]

svclassifier = SVC(kernel='linear')
svclassifier.fit(X_train,Y_train)

#Predict values using the SVM algorithm model
Y_pred = svclassifier.predict(X_test)

#Evaluation
Print(confusion_matrix(Y_test,Y_pred))
print(classification_report(Y_test,Y_pred))

运行后,我得到

ValueError: 无法将字符串转换为浮点数:'Alkl'

'Alkl' 是第一列的最后一行

我的数据集 打印(数据集[:5])

       0  1  2  3  4  5  6  7  8  9  ... 14 15 16 17 18 19 20 21 22 23
0   dstwr  0  0  0  0  0  0  0  0  0 ...  0  0  0  1  0  0  0  0  0  1
1    twns  1  0  0  0  0  0  0  0  0 ...  0  0  0  1  0  0  0  0  0  2
2  Aljdyd  1  0  0  0  0  0  0  0  0 ...  0  0  0  0  0  0  0  0  0  2
3     kml  1  0  0  0  0  0  0  0  0 ...  0  0  0  0  0  0  0  0  0  2
4    nhAr  0  0  0  0  0  0  0  0  0 ...  0  0  0  0  0  0  0  0  0  2

打印(X_train[:5])

[5 rows x 24 columns]
[['twns' '1' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'
  '1' '0' '0' '0' '0' '0' '2']
 ['Aljdyd' '1' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'
  '0' '0' '0' '0' '0' '0' '0' '2']
 ['kml' '1' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'
  '0' '0' '0' '0' '0' '0' '2']
 ['nhAr' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'
  '0' '0' '0' '0' '0' '0' '2']
 ['27' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0'
  '0' '0' '0' '0' '0' '0' '2']]

【问题讨论】:

    标签: python excel pandas numpy


    【解决方案1】:

    这些行

    X_train = array[:,0:22]
    Y_train = array[:,22]
    
    X_test = testarray[:,0:22]
    Y_test = testarray[:,22]
    

    从第一列开始 - 尝试将其用作切片

    [:,1:-1]
    

    这将排除第一列和最后一列,只抓取中间的列。我没有你的数据集,所以我无法测试这是否有效。

    【讨论】:

    • 感谢您的回答!当我尝试这个解决方案时,我得到了 100% 的结果。所以有问题。我正在使用X_train = array[:,1:-1]Y_train = array[:,22]。这是否意味着,对于 X_train,我只使用步骤 -1 的第二列?
    • 啊,我没有给予足够的关注——如果 Y_train/test 应该是最后一列,那么保留它——我的评论更多地集中在你开始切片时是错误的柱子。切片遵循以下格式:[start:stop:step(opt.)]。如果您只执行 [1:-1] 这意味着从索引 1(即第二个元素)开始并在索引 -1 之前停止(即“最后一个”元素-python 允许您使用负数从集合的最后一个元素开始索引指数)。如果您执行 [1:-1:2] 之类的操作,由于步长为 2,它只会占用所有其他元素。希望这会有所帮助!
    • 嗯,试试这个——你能让它打印整个第一行吗?
    • 我添加了上面的例子
    • 谢谢!因此,查看您发布的示例和代码中的更改(假设我在这里对用例有了更好的处理),请执行以下操作: X_train = array[:,1:-1] Y_train = array[: ,-1] X_test = testarray[:,1:-1] Y_test = testarray[:,-1]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2019-08-15
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多