读取多个excel表中多个sheet程序(MATLAB+Python)

读取多个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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值