Replace NaN's in table with zero
Mostrar comentarios más antiguos
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 comentarios
AFiorillo
el 24 de Jul. de 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
el 27 de Jul. de 2015
hager fouda
el 1 de Sept. de 2023
Thank you so much. it works.
Respuesta aceptada
Más respuestas (9)
Akira Agata
el 17 de Feb. de 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 comentario
Mohamed
el 21 de Oct. de 2024
ismissing func. served the purpose.
Yuting Mou
el 29 de Jul. de 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 comentario
Dooyoung Kim
el 25 de Jun. de 2018
This works for me too! Thanks for the suggestion.
Steven Lord
el 23 de Jul. de 2018
7 votos
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 comentario
Nurullah
el 7 de Ag. de 2023
Thank you,
J.M. Verduijn
el 8 de Feb. de 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 comentario
Lautaro Parada
el 2 de Jul. de 2019
This is so simple and accurate! thanks!
Zachary Smith
el 19 de Mzo. de 2020
1 voto
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
el 7 de Mzo. de 2021
Editada: Aron Magesh
el 7 de Mzo. de 2021
1 voto
Just use fillmissing function if the data is in a table or timetable.
1 comentario
Walter Roberson
el 7 de Mzo. de 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
el 23 de Jul. de 2018
0 votos
so, in other words:
mainTTable{:,:}(ismissing(mainTTable)) = 0;
carolina franco
el 28 de En. de 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 comentarios
Stephen23
el 28 de En. de 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
el 28 de En. de 2020
Right! Thanks
Gabor
el 11 de Mzo. de 2021
T{:,2:4}(ismissing(T{:,2:4})) = 0;
2:4 are the columns which are containing NaN values.
1 comentario
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
Categorías
Más información sobre Tables en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!