簡體   English   中英

如何在python中將字符串轉換為int?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM