Fastest way to replace NaNs by empty cells in a table

33 次查看(过去 30 天)
Hi,
I need to replace the NaNs in the columns a and b by empty cells. The code below works but it is pretty slow. Is there a faster way to do this ?
a = rand(1, 1000000)'; a(1:10000) = NaN;
b = rand(1, 1000000)'; b(1:10000) = NaN;
c = repelem({'A101'}, 1000000)';
t = table(a, b, c);
var_names = t.Properties.VariableNames;
for ii = 1:length(var_names)
if ~iscell(t.(var_names{ii}))
t.(var_names{ii}) = cellstr(num2str(t.(var_names{ii})));
idx = contains(t.(var_names{ii}), 'NaN');
t.(var_names{ii})(idx) = {''};
end
end
Thank you,
  1 个评论
Adam Danz
Adam Danz 2020-6-30
I urge you not to do this. The table variables in columns 1 and 2 are numeric and NaN values indicate missing values. To replace the NaN values with emtpy cells, all of your numeric values will have to converted to cells. That not only looks ugly but it makes the table more difficult to work with.
If you're writing the table to a file and do not want NaN values printed, there are other ways around that.
Converting the numeric values to cells just so the NaN values can appear as empty will likely cause more problems than it aesthetically solves.

请先登录,再进行评论。

采纳的回答

Fangjun Jiang
Fangjun Jiang 2020-6-25
M=10;N=5;
a = rand(1, M)'; a(1:N) = NaN;
b = rand(1, M)'; b(1:N) = NaN;
c = repelem({'A101'}, M)';
t = table(a, b, c);
t.a=num2cell(t.a);
t.a(cellfun(@isnan,t.a))={''}

更多回答(0 个)

标签

Community Treasure Hunt

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

Start Hunting!

Translated by