如何将一些特定的列转换为浮动?

问题描述 投票:0回答:1

我正在写一个代码,从一个.data文件中获取信息(是iris.data),我有这样的代码。

lines=file_2.readlines()
list_2=[]
for k in range(len(lines)):
    lines[k]=lines[k][0:len(lines[k])-1]
    list_2.append(lines[k].split(","))
print(list_2)
file_2.close()

结果是这样的

[['5.1', '3.5', '1.4', '0.2', 'Iris-setosa'], ['4.9', '3.0', '1.4', '0.2', 'Iris-setosa'].....[ +147 lists]]

我的问题是,有没有一种方法可以让结果变成这样:(也许可以把每个列表的前4列转换成浮点数?)

[[5.1, 3.5, 1.4, 0.2, 'Iris-setosa'][4.9, 3.0, 1.4, 0.2, 'Iris-setosa']....]

python list
1个回答
0
投票

你可以定义一个像下面这样的函数。

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(",")])

0
投票

我建议把你的文件保存为.csv格式,然后作为熊猫数据框架加载。大多数机器学习库都能很好地与熊猫数据框架合作,你可能应该使用它。

你也可以在这里下载.csv文件。https:/www.kaggle.comucimliris

但对于你的问题。

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)

0
投票

一个基本的解决方法是通过迭代列表将数值转换为: 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']]

但这个解决方案的问题是,它将需要更多的时间 随着列表的长度增加。 该解决方案将有效地工作 对于一个较小的列表。

© www.soinside.com 2019 - 2024. All rights reserved.