读取多个excel表中多个sheet中的数据
数据分为train和test,train有12个excel表格,test有4个excel表格,每一个表格中工作薄的个数不一样,每个工作薄的数据行列数也不一定相同,经过尝试,MATLAB语句更成熟一些,Python语句与库有关系,没有MATLAB那么统一,但Python的确更人性化。
读取所有表格中所有sheet中的数据,单独储存到csv文件中。程序只放了test文件的数据读取。
MATLAB程序
files = dir('*.xlsx');
files_train = files(5:16,:);
files_test = files(1:4,:);
files_exchange = files_train;
files_train([2,3,4:12]) = files_exchange([11,12,2:10]);
clear files_exchange;
waiting=waitbar(0,'excuting...,please wait!');
%因为不清楚每个sheet中数据size,这里设置了最大列数2500,
%经过测试,train最大是有1896列,test是有1910列。将数据储存在矩阵中,
%列数必须相同,选择手动补充零,这一点不如Python,Python可以自动补充'NAN'
len_max = 2500;
A = [];
B = [];
tic
for j = 1:length(files_test)
filenme = files_test(j).name;
[Type, Sheet]=xlsfinfo(filenme);
%status指示 filename 是否为 xlsread 函数可读取的文件
%sheet 返回文件中每个电子表格的名称
for i = 1:length(Sheet)
% i_1 = 12*(i-1)+1;
% i_2 = 12*i;
% data(i_1:i_2,:) = [xlsread("train1-3.xlsx", Sheet{i})];
data = [xlsread(filenme, Sheet{i})]; %也可以读取为cell,没有尝试成功
len = length(data);
data = [data, zeros(12, len_max-len)];
B = [B; data];
end
end
%删除多余零列
for k = 2500 :-1: 1881
no_zero = max(max(abs(B(:, k))));
if no_zero == 0
B(:,k) = [];
else
break;
end
end
waitbar(0.5);
writematrix(B, 'TestAll.csv');
toc
Python程序
import pandas as pd
import xlrd
import os
from pandas import DataFrame
import datetime, time
def TestDeal(files_test)
for fileT in files_test:
wb_T = xlrd.open_workbook(fileT)
sheets_T = wb_T.sheet_names()
sheets_test.append(sheets_T)
dataTest = DataFrame()
for sheet in range(len(sheets_T)):
#指定作为列名的行,默认0,即取第一行;若数据不含列名,则设定 header = None;
df_test = pd.read_excel(fileT, sheetname=sheet, header=None,
index=False, encoding='utf8')
dataTest = dataTest.append(df_test, ignore_index=True)
print("Saving the teat data...")
return dataTest
starttime = datetime.datetime.now()
#windows是用\,而linux是用/,windows根目录是盘符C:\,而linux根目录是/
#inputdir 打开数据所在文件夹
#files = os.listdir(inputdir)
# 获得文件夹下的所有Excel文件
files = [x for x in os.listdir() if x.endswith(".xlsx")]
files_train = [files[0],files[15],files[19],files[11],files[1],files[16],files[14],\
files[10],files[12],files[2],files[8],files[18]]
files_test = [files[4],files[7],files[17],files[3]]
sheets_test, sheets_all = [], []
max_test, max_train = [], []
size_test, size_train = [], []
# read data and deal data
dataTest= TestDeal(files_test)
dataTrain= TrainDeal(files_train)
endtime = datetime.datetime.now()
print (endtime - starttime).seconds
# save data
start = time.time() #windos 用clock
max_data = max_test.append(max_train)
# 创建pdDF格式数据,用于储存csv格式数据
data_save_train = DataFrame(dataTrain)
data_save_test = DataFrame(dataTest)
data_save_test.to_csv("datatest.csv",index=False,header=False,sep=',')
data_save_train.to_csv("datatrain.csv",index=False,header=False,sep=',')
end = time.time()
print('runing time:%f', end-start)