如何去除Matlab readcell生成元胞数组中的<missing>值?
解决MATLAB R2020b读取不等长列Excel时的值问题
针对Excel列长不一致导致readcell返回的元胞数组中短列末尾出现<missing>的问题,提供两种实用处理方案:
方案一:逐列清理<missing>元素(保留各列原有有效长度)
直接读取后遍历每一列,只保留非缺失的元素,自动截断末尾的<missing>:
% 读取目标Excel文件 cellData = readcell('your_target_file.xlsx'); % 遍历每一列清理缺失值 for colIdx = 1:size(cellData, 2) % 筛选当前列非<missing>的元素索引 validRows = ~ismissing(cellData(:, colIdx)); % 更新当前列为有效元素集合 cellData(:, colIdx) = cellData(validRows, colIdx); end
该方法会让每一列仅保留从开头到最后一个有效数据的部分,各列长度可以不同,完全适配用户提供的表格列长差异。
方案二:统一截断到最短有效列长度(所有列长度一致)
如果需要所有列长度统一,先计算每一列的有效数据行数,再将所有列截断到最短的有效行数:
cellData = readcell('your_target_file.xlsx'); % 计算每一列的有效数据行数 validRowCounts = arrayfun(@(col) sum(~ismissing(cellData(:, col))), 1:size(cellData, 2)); % 取最小有效行数作为统一截断长度 maxValidRow = min(validRowCounts); % 所有列截断到统一长度 cellData = cellData(1:maxValidRow, :);
这种方法适合需要后续对各列进行批量统一处理的场景,避免因列长不同引发的索引问题。
注意事项
- MATLAB R2020b的
ismissing函数可以直接识别元胞数组中的<missing>值,无需额外判断逻辑。 - 两种方案都不需要预先指定读取范围,完全适配列长不可预测的用户表格。
内容的提问来源于stack exchange,提问作者AmericanJael
相关产品推荐
相关产品推荐

