将上万且重复的表格数据导入matlab中分类计算

题目:

  • Excel表格中的数据中有123家公司的进项发票信息,但是每一家又分别有若干类型的发票,因此共有数据162485行数据,我们需要将每一家的税额总额算出来,想练习的可以去搜索2020年全国大学生数学建模竞赛C题,因为表格太大了,我这边也只能放一部分,但是信息又不完全,只有数据,列名什么的都没有

代码实现:

%提取表格文件数据前的准备工作
opts = detectImportOptions('D:\Matlab_project\test\附件1:123家有信贷记录企业的相关数据.xlsx');
opts.Sheet = '销项发票信息';
opts.VariableNamingRule = 'preserve';
%读取表格数据
date_txt1 = readtable('D:\Matlab_project\test\附件1:123家有信贷记录企业的相关数据.xlsx', opts); 
%%指定要读取的行范围
startRow = 2;
endRow = 162484;
column1 = date_txt1.("税额")(startRow:endRow);
column2 = date_txt1.("企业代号")(startRow:endRow);
% 将列数据转换为 double 类型
%column1 = double(column1);
column3 = string(column2);
column2 = column3;
Table1 = table(column2,column1);
% 获取唯一的公司代号
uniqueCompanyIDs = unique(column2);
uniqueCompanyIDs = sort(uniqueCompanyIDs);

% 遍历每个公司代号
Table2 = table();
for i = 1:length(uniqueCompanyIDs)
    companyID = uniqueCompanyIDs{i};
    id = double(uniqueCompanyIDs{i});
    
    % 找到相同公司代号的行
    rowsWithSameCompanyID = (column2 == companyID);
    
    % 计算该公司的总税额
    totalTax = sum(column1(rowsWithSameCompanyID));
    
    % 添加结果到新表格
    newRow = table(totalTax); 
    Table2 = [Table2; newRow];
end
%显示函数图像
plot(Table2,1);

代码解析:

读取表格文件数据的准备工作解析:

%提取表格文件数据前的准备工作
opts = detectImportOptions('D:\Matlab_project\test\附件1:123家有信贷记录企业的相关数据.xlsx');
opts.Sheet = '销项发票信息';
opts.VariableNamingRule = 'preserve';
%读取表格数据
date_txt1 = readtable('D:\Matlab_project\test\附件1:123家有信贷记录企业的相关数据.xlsx', opts); 

读取指定列数据代码解析:

%%指定要读取的行范围
startRow = 2;
endRow = 162484;
column1 = date_txt1.("税额")(startRow:endRow);
column2 = date_txt1.("企业代号")(startRow:endRow);
  • 首先:date_txt1 中保存的是整个表格的数据
  • 然后:用 " . " 访问它其中的列数据,单独跟在保存总表格数据的变量后date_txt1 .
  • ("税额’') 是要获取的列名,用括号与双引号圈起来
  • (startRow:endRow) 是要获取数据的行范围,已经通过变量便捷startRow与endRow表示,方便理解

将获取来的列数据转换成相应的类型,方便后续对表格使用unique函数:

% 将列数据转换为 string 类型
column2 = string(column2);
Table1 = table(column2,column1);
  • 首先:将column2也就是保存着公司代号的那一行
  • 先将char类型的id转换为cell元胞数组,然后在通过cell2table转换为表格
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手打猪大屁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值