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']]
但是這個解決方案的問題是,隨著列表長度的增加,它需要更多的時間。該解決方案對于較小的列表將有效地工作
添加回答
舉報