Replace NaN's in table with zero
Afficher commentaires plus anciens
Hello, I have a 1501x7 table called 'x' and there appears to be NaN's in the fourth and sixth column called "Age" and "height". I would like a way to replace NaN's with zeros. Take note, that I have already tried:
k = find(isnan(x))';
x(k) = 0;
% and
x(isnan(x)) = 0;
Yet, neither work because I am using a table, not a matrix. I have also tried converting my table into a cell array, and using these same functions, but they still do not work. They return:"Undefined function 'isnan' for input arguments of type 'cell'" ALSO, please note that the table has columns full of text. So, cell2mat does not work.
3 commentaires
AFiorillo
le 24 Juil 2015
When indexing into a table or cell, parentheses and curly braces have very different meanings. Using parenthesis result in a slice of that table/cell, so the result is also a table or a cell. Using curly braces yields the contents of those slices. See here for a more comprehensive explanation on accessing data in tables.
For your code, try
k = find(isnan(x))';
x{k} = 0;
% and
x{isnan(x)} = 0;
xander fong
le 27 Juil 2015
hager fouda
le 1 Sep 2023
Thank you so much. it works.
Réponse acceptée
Plus de réponses (9)
Akira Agata
le 17 Fév 2017
For example:
% Make a sample table 'T' and replace 'NaN' with 0
T = table({'smith';'jones';'doe'},[20;NaN;40],[NaN;72;66],[120;130;140],'VariableNames',{'Name' 'Age' 'Height' 'Weight'});
idx = ismissing(T(:,{'Age','Height'}));
T{:,{'Age','Height'}}(idx) = 0;
1 commentaire
Mohamed
le 21 Oct 2024
ismissing func. served the purpose.
Yuting Mou
le 29 Juil 2016
I also run across the problem, but there seems to be an easier way:
x.age(isnan(x.age)) = 0;
This is OK in my case
1 commentaire
Dooyoung Kim
le 25 Juin 2018
This works for me too! Thanks for the suggestion.
Steven Lord
le 23 Juil 2018
7 votes
I would use the fillmissing function introduced in release R2016b. See the "Table with Multiple Data Types" example on that documentation page for a demonstration of how to replace NaN values with 0.
1 commentaire
Nurullah
le 7 Août 2023
Thank you,
J.M. Verduijn
le 8 Fév 2019
for i= 1: width(T)
T.(i)(isnan(T.(i))) = 0;
end
Works for me, replaces all NaN values in table T with 0
1 commentaire
Lautaro Parada
le 2 Juil 2019
This is so simple and accurate! thanks!
Zachary Smith
le 19 Mar 2020
1 vote
If you are using readtable() to load the table from a file, then you can add the name-value pair argument 'EmptyValue',0 to do this automatically.
Aron Magesh
le 7 Mar 2021
Modifié(e) : Aron Magesh
le 7 Mar 2021
1 vote
Just use fillmissing function if the data is in a table or timetable.
1 commentaire
Walter Roberson
le 7 Mar 2021
That is what Steven Lord suggested in https://www.mathworks.com/matlabcentral/answers/231096-replace-nan-s-in-table-with-zero#answer_329967
Andy
le 23 Juil 2018
0 votes
so, in other words:
mainTTable{:,:}(ismissing(mainTTable)) = 0;
carolina franco
le 28 Jan 2020
Hi,
Another simple way to understand what's going on .
For me, it works well in R2014a. You only need to enter the matrix with NaN values without specifying the columns where NaN values are.
%Input
m_data=C{1,1}; % Matrix with NaN values
%Code
s1=size(m_data,1);
for i= 1: s1
msubs=m_data(i,1:end); % Save existing data in ith row of m_data
msubs=msubs(isnan(m_data(i,1:end))==0); %Substitute matrix/ taking only non-NaN values
m_data(i,1:end)=0; %Erase all existing values in ith row of m_data
m_data(i,1:size(msubs,2))=msubs; %Substitute values without NaN
end
2 commentaires
Stephen23
le 28 Jan 2020
Note that all the original question explicitly states that "..I am using a table, not a matrix", and all of the other answers work with tables, not numeric matrices. Tables are a container array type:
carolina franco
le 28 Jan 2020
Right! Thanks
Gabor
le 11 Mar 2021
T{:,2:4}(ismissing(T{:,2:4})) = 0;
2:4 are the columns which are containing NaN values.
1 commentaire
Interesting, that does work.
T = table({'smith';'jones';'doe'},[20;NaN;40],[NaN;72;66],[120;130;140],'VariableNames',{'Name' 'Age' 'Height' 'Weight'})
T{:,2:4}(ismissing(T{:,2:4})) = 0
Catégories
En savoir plus sur Tables dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!