我是机器学习的新人。尝试使用int作为字母时遇到了一些问题。我在Mac OS上使用Python 3.5。这是我的代码:
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()
listFromLine1 = line.split('\t')
listFromLine = zeros(3)
i = 0
for value in listFromLine1:
if value.isdigit():
valueAsInt = int(value)
listFromLine[i] = valueAsInt
i += 1
returnMat[index, :] = listFromLine[0:3]
classLabelVector.append(int(listFromLine1[-1]))
index += 1
return returnMat, classLabelVector
这是我的txt文件:
23 8 1 f
7 8 5 j
5 9 1 j
6 6 6 f
这是错误:
classLabelVector.append(int(listFromLine1[-1])) ValueError: invalid literal for int() with base 10: 'f'
有人可以帮我解决这些问题吗?
答案 0 :(得分:0)
如果我正确理解了您想要的结果,您想要返回一个包含n个列表的列表。每个清单都沿着[23。 8. 1.]。然后你想要一个第二个列表,它列出每个列表的最后一个数字:[1,5,1,6]。
假设这一切都是正确的,你得到classLabelVector.append(int(listFromLine1[-1])) ValueError: invalid literal for int() with base 10: 'f'
的原因是因为你没有返回任何数字,而是返回一个字符串。我发现了3个应该解决错误的问题。
首先,我发现没有' \ t'在您的文本文档中。我改为使用listFromLine1 = line.split(' ')
,它基于空格分割。这可能只是从你发布时复制的方式来看。
其次,当你为listFromLine
中的每个位置分配一个值时,你会忽略它并从listFromLine1
追加你没有做任何事情,所以它仍然是一个字符串。
第三,尝试使用if value.isnumeric():
代替if value.isdigit():
。
修复这些问题应该让程序正常运行。此外,您打开文件并运行fr.readlines()两次,从不告诉它关闭。您为相同的信息制作程序两次。您应该尝试将其重写为仅打开一次并使用with open() as fr:
,因为它将在完成后关闭。
编辑:如果你想要第二个列表而不是[f,j,j,f],那么将它保持为listFromLine1并使用str()而不是int():classLabelVector.append(str(listFromLine1[-1]))