【MATLAB】 빈 셀이있는 CSV 파일 처리
소개
지난번은
CSV
파일에 계산 셀을 추가하고 excel
파일로 저장하는 것을 구현했습니다.이전에 사용한
CSV
파일은 첫 번째 줄에 데이터 레이블이 있고 각 열에 같은 유형의 데이터가 늘어선다는 매우 깨끗한 만들기가 되어 있지만, 업무에서 실제로 취급하는 파일은 더 엉망이 되고 있다 .자세하게 설명하면 다음과 같은 느낌.
1
같은 데이터가 가로로 나란히 있고
excel
에서 열었을 때의 '''빛나는 ''을 중시하고 5 행째에 빈 행이나 G 열에 빈 열이 들어가거나 한다.데이터가 옆에 늘어서 있는 점에 대해서는
matlab
로 처리하는데 있어서 특별히 문제는 없었지만, 빈 셀이 들어가 있으면 그대로는 출력할 수 없었으므로, 회피 방법을 간단히 정리한다.이번은 에러가 되어 깨끗해2가 되어 있는 곳으로부터 순서대로 써 가기 때문에, 결론만 보고 싶은 경우는 스킵 해 주세요.
빈 셀을 그대로 출력해 봅니다
% ファイルを読み取ってcellに格納
path = 'C:\Users\dejiko';
file = '身長体重_空白セルあり.csv';
filepath = fullfile(path, file);
T = readcell(filepath,'DatetimeType','text');
% データ内容は変更せずにとりあえずそのまま出力する
Tout = T;
% ファイルに書き込む
[path, file] = fileparts(filepath);
newFile = sprintf('%s_matlab.xlsx', file);
outputFilePath = fullfile(path, newFile);
writecell(Tout, outputFilePath);
결과
실행하려고하면 다음과 같은 오류가 발생하여 종료되었습니다.
오류: writecell (line 119)
'missing'형식의 cell 요소는 지원되지 않습니다. 쓰기 전에 요소를 숫자, 논리, 문자열, datetime, duration 또는 categorical
로 변환하십시오.
3.
missing의 함정
변수 T의 내용을
matlab
로 표시해 보면 다음과 같이 되었다. 빈 셀은 missing
형식으로 저장되는 것 같고 출력 할 때 이것을 무언가로 변환해야합니다.missing 처리
missing
부분을 빈 char
로 대체하는 프로세스를 추가합니다.구현
% missingを判定
missingCell = cellfun(@ismissing, T, 'UniformOutput',false);
% maskをcell2matしてlogical配列にしたいが,
% char配列のセルについては{1×N(文字数) logical}になっていて,そのままではcell2matできない
% {1×N logical}となっている部分を抽出して{1×1 logical}に置き換える
len = cellfun(@length, missingCell, 'UniformOutput',false);
len = cell2mat(len);
lenMask = len ~= 1;
missingCell(lenMask) = {false};
% 全セルが{1×1 logical}になったのでcell2mat出来る
mask = cell2mat(missingCell);
Tout = T;
% missing部分を空文字に置き換える
Tout(mask) = {''};
해설
먼저
ismissing
는 각 셀이 missing
인지 여부를 결정합니다.missingCell = cellfun(@ismissing, T, 'UniformOutput',false);
이하
ismissing
의 결과를 나타낸다.문자열의 부분이
{1×N logical}
로되어 있으며, 그대로는 cell2mat
를 할 수 없습니다.다음으로
{1×N logical}
가되는 부분을 추출하기 위해 length
를 적용한다.len = cellfun(@length, missingCell, 'UniformOutput',false);
len = cell2mat(len);
lenMask = len ~= 1;
그런 다음
{1×N logical}
부분을 {false}
로 바꿉니다.missingCell(lenMask) = {false};
이것이 모두
{1×1 logical}
가되었으므로 cell2mat
하여 마스크를 만들고 원래 셀에 마스크를 적용하면 끝입니다.요약
빈 셀을 고려한
excel
파일의 입출력은 matlab
로 구현되었다.계속해서
excel
와의 화해를 완수해 나간다.htps : // 그럼.ぃきぺぢ아. 오 rg/우키/%에 3% 81% 8에 % 에 3% 81% 에 1% 에 3% 81% 93% 에 3% 81% BC% 에 3% 83% 에 B% 에 3% 83% BC% 에 3% 83% 84% 에 3% 82% BF% 에 3% 83% 에 B% 에 3% 83% 88 ↩
htps //w w. 니코 ゔ에서. jp/watch/sm37510647 ↩
https://www.google.com/search?q=%E3%81%AF%E3%81%84%E3%81%AF%E3%81%84%E5%87%9B%E4%B8%96 %E3%81%8C%E6%82%AA%E3%81%86%E3%81%94%E3%81%96%E3%81%84%E3%81%BE%E3%81%97%E3 %81%9F ↩
Reference
이 문제에 관하여(【MATLAB】 빈 셀이있는 CSV 파일 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dokagui_tairan/items/323529f9dce3876a7a4e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)