MATLAB Answers

Remove rows with NaN from a table

355 views (last 30 days)
alpedhuez
alpedhuez on 13 Jun 2018
Commented: Blake on 19 Sep 2019
I have a table T. T has some rows with NaN. I would like to remove any rows with NaN in any entry. Please advise.

  0 Comments

Sign in to comment.

Accepted Answer

Paolo
Paolo on 13 Jun 2018
Use rmmissing :
T = table([38;43;38;40;49],[71;NaN;64;67;64],[176;163;131;NaN;119])
T =
Var1 Var2 Var3
____ ____ ____
38 71 176
43 NaN 163
38 64 131
40 67 NaN
49 64 119
rmmissing(T) =
Var1 Var2 Var3
____ ____ ____
38 71 176
38 64 131
49 64 119

  2 Comments

Jonathan Beard
Jonathan Beard on 26 Apr 2019
This treats empty and nan equivalently. If you know the column that contains nans for which you want to remove the corresponding rows of you can use something like this.
T = T(find(~isnan(T.ColumnWithSomeNans)), :);
Walter Roberson
Walter Roberson on 26 Apr 2019
Only numeric values can be nan (or not), and numeric values in a table cannot be empty: the table-reading process fills them in with a definite value (typically nan.)
You would need to go back to the original file (if it is text) or use activex or .NET talking to Excel in order to determine whether a location is empty rather than nan.

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 13 Jun 2018
T( any(ismissing(T),2), :) = [];

  4 Comments

Show 1 older comment
Paolo
Paolo on 13 Jun 2018
What does your comment mean? Both solutions work fine and solved your problem. Please mark any answer as accepted.
Walter Roberson
Walter Roberson on 13 Jun 2018
rmmissing is good, and I did not know about it. I voted for Paolo's answer, but I left mine as an alternative solution.
Blake
Blake on 19 Sep 2019
Walter thanks:
For some reason, Pablo's answer didn't work on my data which had mixed data types, but yours did.

Sign in to comment.

Sign in to answer this question.

Tags

Products