xlsreadをre​adcellに置き換​え時の空白データの処​理

24 views (last 30 days)
Mamoru Mabuchi
Mamoru Mabuchi on 12 Nov 2020
Commented: Kotaro Shoji on 5 Oct 2022
xlsreadをreadcellに置き換えた時の空白処理について、教えていただきたいです。
[~,~,raw]= xlsread(xlsfile_name,sheet_name);
↓置き換え
raw= readcell(xlsfile_name, 'Shhet', sheet_name)
上記置き換えを実施したのですが、エクセルのデータに空白があると、
’missing’になってしまいます。
xlsreadと同様に'NaN'にするには、どのようにすれば良いですか?
  2 Comments
Akira Agata
Akira Agata on 12 Nov 2020
readmatrixreadtable 関数であれば欠損部分は NaN になると思いますが、いかがでしょうか?(あるいは、何らかの理由で readcell 関数の使用をご希望でしょうか?)
Kotaro Shoji
Kotaro Shoji on 5 Oct 2022
私も同じ問題に直面したのですが、cellfun関数を利用することで、readcellで読み取った際に"missing"となるすべてのセルをNaNに置き換えることができました。
具体的には以下の処理になります。
raw= readcell(xlsfile_name, 'Sheet', sheet_name);
raw(cellfun(@(x) all(ismissing(x)), raw)) = {NaN};
投稿からだいぶ時間が経過しているので、未だニーズがあるか分かりませんが、ご参考になれば幸いです。

Sign in to comment.

Answers (3)

Mamoru Mabuchi
Mamoru Mabuchi on 12 Nov 2020
エクセルファイルが、1行目に変数名、2行目以降にデータが入っているため、
そのまま読める(読み込み後の変数の型が同じ)ので、readcell関数を選択しました。
他の方法としては、下記を考えていますが、その他に簡単に変換する方法はありますでしょうか?
readtableで読み込み開始行を1行目に指定  → table2cell で型変換

Akira Agata
Akira Agata on 12 Nov 2020
1行目に変数名、2行目以降にデータが入っているということであれば、readtable 関数が適しているかと思います。もし変数名が日本語などの場合は、以下のように 'PreserveVariableNames' オプションを true に設定することでうまく読み取れるかと思いますがいかがでしょうか?
T = readtable(xlsfile_name,'PreserveVariableNames',true)

Mamoru Mabuchi
Mamoru Mabuchi on 13 Nov 2020
Edited: Mamoru Mabuchi on 13 Nov 2020
アドバイスありがとうございます。
読み込んだ後の処理の都合により、xlsreadで読み込んだ時と同じ値、同じ型、同じサイズにしたいです。
試しにreadtableで読み込んだ値を下記にて変換しました。
raw = [raw.Properties.VariableNames ; table2cell(raw)];
読み込んでいるエクセルファイルには、1行目に変数名、2行目以降にデータのものもあれば、2行目に変数名、3行目以降にデータのものも混在しております。
後者の場合、上手く変換できず、困っています。
読み込んだ後のデータ開始行もxlsreadで読み込んだ時と同じにしたいです。
また、読み込み後にisnan関数を使って判定をしているので、空欄をNaNで埋めたいです。
アドバイスいただけないでしょうか

Categories

Find more on データのインポートと解析 in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!