根据标题打印NumPy数组

时间:2017-09-27 04:39:45

标签: python python-2.7 csv numpy

我有一个包含一些数据的csv文件,这里有一个示例:

Alcohol,Malice acid,Ash,Alcalinity of ash,Magnesium,Total phenols,Flavanoids,Nonflavanoid phenols,Proanthocyanins,Color intensity,Hue,OD280/OD315 of diluted wines,Proline
1,14.23,1.71,2.43,15.6,127,2.8,3.06,0.28,2.29,5.64,1.04,3.92
1,13.2,1.78,2.14,11.2,100,2.65,2.76,0.26,1.28,4.38,1.05,3.4
1,13.16,2.36,2.67,18.6,101,2.8,3.24,0.3,2.81,5.68,1.03,3.17

我读了我的csv文件并将数组转换为3个numpy数组:

wine_data_file = open("wine.csv","r")

wine_data_reader = csv.reader(wine_data_file, delimiter=",")

wine_data = []
wine_labels = []
wine_columns = []

#Read each line of wine.csv
count = 0
for row in wine_data_reader:

    if count <= 0:
        wine_columns += [row[1:]]
    else:
        wine_labels += [int(row[0])]
        wine_data += [map(float,row[1:])]
    count = count + 1

wine_data = np.array(wine_data,dtype=float)
wine_labels = np.array(wine_labels)
wine_columns = np.array(wine_columns)

这些numpy数组将保存列标题,标签(每行的第一个数字)和数据。

我可以打印此结果:

print wine_data[wine_labels == 1]

哪个会让我在wine_data中的每一行都有一个标签(酒精)为1.但是我无法对此做同样的事情:

print wine_data[wine_columns == "Hue"]

我的问题是,如何才能在Hue的numpy数组中获得每个索引。

期望的结果:

[[5.64],[4.38],[5.68]]

2 个答案:

答案 0 :(得分:1)

数据是二维的,您将布尔索引应用于第一维。相反,您希望将其应用于第二维......

#columns ----------|
#rows-----|        |
#         V        V
wine_data[:,wine_columns == 'Hue']

答案 1 :(得分:1)

让我们首先考虑为什么

print wine_data[wine_labels == 1]

的工作原理。 wine_labels == 1评估为[ True True True],这意味着您选择了wine_data数组中三行中的每一行。

当您尝试评估时

print wine_data[wine_columns == "Hue"]

然后过滤器wine_columns == "Hue"评估为[[False False False False False False False False False True False False]]。注意双括号:wine_columns是一个二维数组,有一行和12列。这使得将它用作wine_data数组的选择器变得棘手。

所以让我们使这个数组成为一维的:(wine_columns == "Hue")[0][False False False False False False False False False True False False]。现在我们想将它用作wine_data中列的选择器,我们还想要任何行:

print wine_data[:,(wine_columns == "Hue")[0]]

给出

[[ 5.64], [ 4.38], [ 5.68]]

这是你想要的,但请记住它仍然是一个二维数组(3行,1列)。