[英]how can the string convert to int in python?
在實際應用中的機器學習第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')
順便說一句,這本書的中文版本與英文版本有所不同。
在python或其他環境中,字符串(確實)都不能轉換為int,
然而,
解決方案是
如果所有kNN
訓練/交叉驗證記錄(又名觀察值,示例)
確實符合[ 3x FEATURE, 1x LABEL]
的約定
采用:
classLabelVector.append( listFromLine[-1] ) # to .append a LABEL, not an int()
您應該手動將那些“ largeDoses”“ smallDoses”“ didntLike”轉換為數字。 除非內部的String是int,否則String無法轉換為int。
if (listLine[-1]=='largeDoses'):
listLine[-1] = '3'
elif (listLine[-1]=='smallDoses'):
listLine[-1] = '2'
else:
listLine[-1] = '1'
可以看出,它不是簡單地將字符串更改為整數數據,而是將其更改為表。 因此,修改程序如下。
labels = {'didntLike':1,'smallDoses':2,'largeDoses':3}
classLabelVector.append(labels[listFromLine[-1]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.