我已阅读各种教程,但我无法在我的任务中实现这些教程。
我的目标是从文本文件中提取数据。然后根据数据绘制一些直方图。但是,我是python的新手,我坚持切片数组的基础知识。 在文本文件中有一个原始数据集;每个项目都在它自己的行中,每行都有多个属性。这些属性用逗号分隔。
我正在尝试将数据集拆分为两个。将每行的第一个属性(栽培品种)分成一个数组,将每个项目的其余属性(给定栽培品种的属性)分成第二个数组。 原始数据为178 x 14格式。
我成功地使用以下代码提取了第一个数组:
readFile = open('wine.data', 'r')
cultivar = np.loadtxt(readFile, delimiter=',', usecols=[0], unpack=True)
但是当我尝试制作第二个数组时,我遇到了问题。
readFile = open('wine.data','r')
attributes = np.loadtxt(readFile, delimiter=',', usecols=[-13], unpack=True)
无论我尝试使用usecols-method,它都是错误的语法(如上面的代码所示)或者我会得到一个扭曲的数组,如下所示:
[[1.00000000e + 00 1.00000000e + 00 1.00000000e + 00 ...,3.00000000e + 00 3.00000000e + 00 3.00000000e + 00] [1.42300000e + 01 1.32000000e + 01 1.31600000e + 01 ...,1.32700000e + 01 1.31700000e + 01 1.41300000e + 01] [1.71000000e + 00 1.78000000e + 00 2.36000000e + 00 ...,4.28000000e + 00 2.59000000e + 00 4.10000000e + 00] ... [1.04000000e + 00 1.05000000e + 00 1.03000000e + 00 ...,5.90000000e-01 6.00000000e-01 6.10000000e-01] [3.92000000e + 00 3.40000000e + 00 3.17000000e + 00 ...,1.56000000e + 00 1.62000000e + 00 1.60000000e + 00] [1.06500000e + 03 1.05000000e + 03 1.18500000e + 03 ...,8.35000000e + 02 8.40000000e + 02 5.60000000e + 02]]
整个python代码在这里:
import numpy as np
import matplotlib.pyplot as plt
import urllib
readFile = open('wine.data', 'r')
first = np.loadtxt(readFile, delimiter=',', usecols=[0], unpack=True)
readFile = open('wine.data','r')
rest = np.loadtxt(readFile, delimiter=',', usecols=[-13], unpack=True)
readFile.close()
print rest
答案 0 :(得分:1)
usecols
需要是一系列列索引。所以要获得第1-13列,你可以做到
readFile = open('wine.data', 'r')
rest = np.loadtxt(readFile, delimiter=',', usecols=range(1,14), unpack=True)
此外,无需两次读取文件。您可以读取文件一次并拆分(使用numpy的索引),如此
readFile = open('wine.data', 'r')
data = np.loadtxt(readFile, delimiter=',', unpack=True)
first = data[:,0]
rest = data[:,1:]