如何正确地从表格中删除NaN值

4
在Matlab中读取Excel电子表格后,我的结果表中不幸包含了NaN。例如,这个Excel表格:

Excel table

会产生以下表格:

Matlab table

出现了额外的NaN列。我尝试使用以下代码片段删除NaN:

measurementCells = readtable('MWE.xlsx','ReadVariableNames',false,'ReadRowNames',true);
measurementCells = measurementCells(any(isstruct(measurementCells('TIME',1)),1),:);

然而,这会导致一个0x6的表格,不再存在任何值。如何正确删除NaN,而不删除表格中的任何数据?

2
按定义来说,“删除NaN而不删除数据”是不可能的!你期望结果看起来像什么?Var5Var6是数值类型列,因此不能有空白元素,因此存在NaN。你可以将它们转换为字符数组并使用空字符串,但这似乎很麻烦,最终以一种尴尬的数据类型结束。也许知道为什么要删除NaN会有所帮助。你的主要问题是使用readtable输出常量变量类型的列,而你想要的是常量变量类型的 - Wolfie
1
我无法重现您的结果(即没有额外的NaN列)。请确保您的Excel文件中“G”列中没有任何空格。 - gnovice
不要删除NaN,而是稍后考虑它们。您可以使用isnan函数检查NaN。如果您真的想删除NaN,可以在readtable函数中使用参数对('EmptyValue',value)将其替换为您选择的某个值。 - Artyom Emelyanenko
我面临的主要问题是 NaNs,因为我无法通过 measurementCells{{nameOfRow},:}获得一行数据,因为 Matlab 告诉我该行中并不是所有值都与 NaNs 相同类型,因为这些 NaNs 似乎是 cell 类型,而不是 double NaNs。 因此,将所有 NaNs 转换为 double 类型的 NaNs 也会解决我的问题。 - Axel
1个回答

2

要么是这样:

tab = tab(~any(ismissing(tab),2),:);

或者:

tab = rmmissing(tab);

如果您想删除包含一个或多个缺失值的行,请使用以下方法。如果您想要替换缺失值为其他值,请了解有关如何使用fillmissing (https://mathworks.com/help/matlab/ref/fillmissing.html) 和 standardizeMissing (https://mathworks.com/help/matlab/ref/standardizemissing.html) 函数的内容。这些示例是详尽的,应该能帮助您找到最适合您需求的解决方案。您最后一种选择是在调用readtable函数时使用EmptyValue参数来查找(并以您喜欢的方式操作)NaN值。但是,这仅适用于数值数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接