3 回答
TA贡献1909条经验 获得超7个赞
您可以定义如下函数:
def convert(item):
try:
return float(item)
except ValueError:
return item
然后在列表理解中调用它,您可以将其附加到list_2列表中。
顺便说一句,我怀疑您这样做 ->是为了从您正在阅读的文件的每一行中lines[k] = lines[k][0:len(lines[k]) - 1]删除尾随的换行符 ( )。\n更简洁的方法如下:
lines = file_2.read().splitlines()
file_2.close()
list_2 = []
for line in lines:
list_2.append([convert(item) for item in line.split(",")])
TA贡献1821条经验 获得超6个赞
我建议将您的文件保存为 .csv 格式并将其加载为熊猫数据框。大多数机器学习库都可以很好地与 panda 数据框配合使用,您可能应该使用它。
您还可以在此处下载 .csv 文件:https ://www.kaggle.com/uciml/iris
但是对于你的问题:
df = pd.DataFrame(list_2, columns = ['a', 'b', 'c', 'd', 'Species'])
df = df.astype({"a": float, "b": float, "c": float, "d": float})
list_2 = list(df.values)
TA贡献1848条经验 获得超10个赞
一个基本的解决方案是遍历列表以将值转换float为如下所示,
l1=[['5.1', '3.5', '1.4', '0.2', 'Iris-setosa'], ['4.9', '3.0', '1.4', '0.2', 'Iris-setosa']]
for i in range(len(l1)):
for j in range(4):
try:
l1[i][j]=float(l1[i][j])
except:
print("not a float value")
print(l1)
输出:
[[5.1, 3.5, 1.4, 0.2, 'Iris-setosa'], [4.9, 3.0, 1.4, 0.2, 'Iris-setosa']]
但是这个解决方案的问题是,随着列表长度的增加,它需要更多的时间。该解决方案对于较小的列表将有效地工作
添加回答
举报