2017-09-27 43 views
0

我有一些数据的csv文件,这里是一个示例:打印NumPy的阵列上头

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]] 
+0

你试过了什么?请给我们一些信息! – Boggartfly

+0

我想你想要熊猫。 –

+0

@PauloScardine我必须使用一个numpy数组,它用于学校作业。 –

回答

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列)。

1

数据是二维的,和你申请一个布尔指数的第一维。相反,你想将它应用到第二维...

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