python读取xls数据_python_从.mat与.xls类型文件中读取数据

从.xls类型文件中读取数据

在写机器学习算法的时候从UCI下载了一些数据,但是格式不是csv,而是.txt/.data,可以先用excel打开数据,在excel中将数据进行分列后导入python进行操作.

这里说说如何在python中进行简单的.xls文件读操作

需要用到的库:

import xlrd

xlrd 0.9.4下载

安装:下载后解压,在win7下打开cmd,使用cd将路径改为xlrd 0.9.4所在路径,使用python setup.py install 进行装完了。

我在http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29下载了胸腺细胞数据,数据结构是569*32,其中每行是一个细胞样本的数据,第一列是细胞编号,第二列是细胞类型(1为benign良性,-1为malignant恶性),第3列到第32列是细胞的特征数据,比如:半径,纹理,周长等等。如下图所示:

数据格式

文件存为:wdbc.xls。

1.读取xls文件

安装好xlrd库后,首先将xls文件读取到python里

book = xlrd.open_workbook("wdbc.xls")

#book.nsheets可以查看到在Book对象中的文件有多少个worksheet

#book.sheet_names()可以查看sheet的名字,结果[u'wdbc']

2.取出xls的sheet

table = book.sheet_by_index(0)#通过索引顺序获取

#table = book.sheet_by_name(u'wdbc')#通过名称获取

3,获取sheet的行列数

#获取行数,结果为569

nrows = table.nrows

#获取列数,结果为32

ncols = table.ncols

4.取出行列中数据

这里我们想分别取出细胞类型(label)数据和细胞特性数据(data),第2列为细胞类型(1为benign良性,-1为malignant恶性),第3列到第32列是细胞的特征数据。

a.取label数据

table.col_values(1)

#取行的数据是table.row_values(i)

#可以取出第二列的数据label数据,是list类型,不便于操作,需要将它转化成array类型

label=np.array(table.col_values(1))

#print label.shape,结果为(569,)

b.取data数据

我采用的是使用for循环一列一列的取,从第3类到第32列,每取一列使用append方法添加在list里面,取完后将list转为array。这时得到的array为(30,569),和label不对应,改为一行是一个样本的全部特征值,需要对data取转置

data=[]

for i in range(2,ncols):

data.append(table.col_values(i))

data=np.array(data)

#data.shape=(30,569)

data=data.T

#data.shape=(569, 30)

其实不用这么麻烦,可以直接把xls存成csv格式,在python中对csv进行操作。

import pandas as pd

data = pd.read_csv("wdbc.csv")

从.mat类型文件中读取数据

matlab中使用的数据可能存成了.mat的格式

在python中如果要使用.mat中的数据,需要使用到

import scipy.io as sio

在此处我依旧要读取的是.mat文件中的胸腺细胞数据,文件名train.mat,数据结构依旧包括细胞类型(label)数据和细胞特性数据(data)。

1.读取.mat文件

data_train = sio.loadmat('train.mat')#读出的数据是字典

2.获取.mat文件中的有效数据

要从字典中获得key为label与data的数据

data_train_label=data_train.get('label')#取出字典里的label

data_train_data=data_train.get('data')#取出字典里的data

3.将数据转换成需要的格式

这里label是285行的数组,data该为(285,30)的数组

data_train_label=data_train_label.reshape(285,)

data_train_data=data_train_data.T

#使用.shape方法检验数据是否满足要求

你可能感兴趣的:(python读取xls数据)