150万行の行列の一行目にラベルを追加し、csvファイルで保存する方法に関して
27 views (last 30 days)
Show older comments
150万行の行列データの一行目にラベルを追加し、csvファイルで保存したいと考えています。
保存された際に'NaN'は空にしたいです。
保存データのイメージ(SaveDataの一行目にlabelを追加し保存する)
label = {'label1', 'label2'};
data1 = (0:1:1500000).';
data2 = (0:1:1500000).';
data1(1) = NaN;
data1(2) = NaN;
data2(4) = NaN;
SaveData = horzcat(data1,data2);
保存された際のcsvファイルの中身のイメージ
label1, label2
,0
,0
2,2
3,
4,4
5,5
.
.
.
1499999,1499999
1500000,1500000
普段はxlswriteを使用するのですが、xlswriteは150万行のデータの書き込みはできないため。
お力添えをお願いします。
0 Comments
Accepted Answer
Musashi Ito
on 22 Jan 2020
Edited: Musashi Ito
on 22 Jan 2020
150 万行のデータの書き込みは writetable 関数を使用してできそうです。よってデータ型を table 型に変換する必要があります。table 型に変換すれば各行の名前も追加できます。
しかしながら、writetable 関数には NaN を空に変換するオプションがなさそうですので、どうしても空にしたい場合はプログラムを工夫する必要がありそうです。
例えば、以下のようなプログラムでしたら書き出せそうです。(時間がかかりますが・・・)
% 150万行2列のデータの作成
label = {'label1' 'label2'};
data1 = (0:1500000)';
data2 = (0:1500000)';
data1(1) = NaN;
data1(2) = NaN;
data2(4) = NaN;
SaveData = [data1 data2];
% table 型のデータ T に変換
T = array2table(SaveData);
T.Properties.VariableNames = label; % 各行ラベルを代入
% table データ内の数値データを cell 配列に変換
T.label1 = num2cell(T.label1);
T.label2 = num2cell(T.label2);
% セル配列内の NaN のところを特定して 空配列[] に置き換え
T.label1(cellfun(@isnan, T.label1)) = {[]};
T.label2(cellfun(@isnan, T.label2)) = {[]};
% table 型のデータ T を csv 形式で書き出し
% 書き出しに時間がかかります
writetable(T,'mydata.csv','Delimiter',',','QuoteStrings',true)
他にもっと良い方法があるかもしれないです。
0 Comments
More Answers (0)
See Also
Categories
Find more on 記述統計 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!