如何在python中将字符串转换为int?

时间:2014-10-10 15:20:30

标签: python numpy

机器学习在行动中第2章,一个示例从文件中读取记录,每行如下:

124  110 223 largeDoses

(忘记它的实际含义)

kNN.py中的一个功能是:

 def file2matrix(filename):
      fr = open(filename)
      numberOfLines = len(fr.readlines())        
      returnMat = zeros((numberOfLines,3))       
      classLabelVector = []                       
      fr = open(filename)
      index = 0
      for line in fr.readlines():
          line = line.strip()
          listFromLine = line.split('\t')
          returnMat[index,:] = listFromLine[0:3]
          classLabelVector.append(int(listFromLine[-1]))
         index += 1
     return returnMat,classLabelVector

问题是listFromLine[-1]是一个字符串('largeDoses'等),它如何转换为int

在书中,它说numpy可以解决这个问题。

(从书中:你必须明确地告诉翻译你想要列表中最后一项的整数版本,否则它会给你字符串版本。通常,你必须这样做,但NumPy会为您处理这些细节。) 但是,

ValueError: invalid literal for int() with base 10: 'largeDoses' 

发生

import kNN
kNN.file2matrix('dataset.txt')
BTW,这本书的中文版与英文版不同。 enter image description here

enter image description here

3 个答案:

答案 0 :(得分:1)

String(确实)不能在python中转换为int,也不能在其他环境中转换为

然而,

解决方案是

将机器学习(确实)付诸行动

如果所有kNN - 输入培训/交叉验证记录(a.k.a.观察,示例)

符合[ 3x FEATURE, 1x LABEL]

的惯例

使用:

classLabelVector.append( listFromLine[-1] )    # to .append a LABEL, not an int()

答案 1 :(得分:1)

你应该将那些“大剂量”转换成“大剂量”。 ' smallDoses' ' didntLike'手数到手数。除非String inside是int。

,否则String不能转换为int
<form method="post" action="{{ path('save', {'id': id, 'myObject': myObject}) }}">

答案 2 :(得分:0)

可以看出,它不是简单地将字符串更改为整数数据,而是将其更改为表。因此,修改程序如下。

labels = {'didntLike':1,'smallDoses':2,'largeDoses':3}
classLabelVector.append(labels[listFromLine[-1]])