将列表转换为数组后创建列

时间:2018-09-18 05:40:14

标签: python numpy

我的问题是如何将前四列转换为浮点数,最后一列转换为字符串?更重要的是,我不能使用Pandas或CSV,而只能使用numpy。我将如何处理?我已经将列表转换为数组,并且当前显示:

'5.0,3.0,1.6,0.2,Iris-setosa'

我还需要添加适当的列标题,任何输入将不胜感激。 谢谢!

import numpy as np

training_data = open("C:\Users\Angel\Downloads\iris-training-data.csv")
training_data_list = []

for elements in training_data:
    training_data_list.append(elements)


training_data_array = np.array(training_data_list)

print "The shape is {}\n".format(training_data_array.shape)

print "The visual array is: {}".format(training_data_array)

2 个答案:

答案 0 :(得分:1)

我认为这就是您要寻找的

import csv
with open('path_to_csv', newline='') as file:
data = csv.reader(file, delimiter=' ')
for row in data:
    row = row[0].split(',')
    r = [float(item) for item in row[:4]]
    r.append(str(row[4]))
    print(r)

这是我的输出,但是我将其运行9列而不是5列。但这是相同的数据集。我输入的代码将对您有用。

[7.2, 0.805555556, 3.0, 0.416666667, 5.8, 0.813559322, 1.6, 0.625, 'virginica']
[7.4, 0.861111111, 2.8, 0.333333333, 6.1, 0.86440678, 1.9, 0.75, 'virginica']
[7.9, 0.9999, 3.8, 0.75, 6.4, 0.915254237, 2.0, 0.791666667, 'virginica']
[6.4, 0.583333333, 2.8, 0.333333333, 5.6, 0.779661017, 2.2, 0.875, 'virginica']
[6.3, 0.555555556, 2.8, 0.333333333, 5.1, 0.694915254, 1.5, 0.583333333, 'virginica']

答案 1 :(得分:0)

AFAIK是numpy的基本组成部分,它的数组是齐整的(每个元素的类型完全相同)。

如果您需要其他类型的额外行(例如标题)或一列(作为字符串的最后一列),则必须将它们保留在单独的numpy数组中。

您可以使用astype方法将输入的数字部分从字符串转换为浮点型,例如:

string_col = traninig_data_array[:,4] # the last column
numbers = training_data_array[:,:4].astype(dtype=np.float64)