【问题标题】:How to properly remove NaN values from table如何从表中正确删除 NaN 值
【发布时间】:2018-05-25 06:56:11
【问题描述】:

在 Matlab 中阅读 Excel 电子表格后,不幸的是,我的结果表中包含了 NaN。以这个 Excel 表格为例:

将导致此表:

出现额外的 NaN 列。我尝试使用以下代码 sn-p 删除 NaN:

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

但是,这会产生一个0x6 表,不再存在任何值。如何在不从表中删除任何数据的情况下正确删除 NaN?

【问题讨论】:

  • “在不删除数据的情况下删除 NaN”根据定义是不可能的!你期望结果是什么样的? Var5Var6 是数字类型列,因此不能有空白元素,因此是 NaN。您可以将它们转换为字符数组并使用空字符串,但是以一种尴尬的数据类型结束数据似乎很麻烦。了解 为什么 您要删除 NaN 可能会有所帮助。 您的主要问题是使用 readtable 输出常量变量类型的列,当您想要 rows 常量变量类型
  • 我无法重现您的结果(即没有额外的 NaN 列)。确保 Excel 文件的“G”列中没有任何空格。
  • 不要删除 NaN,而是稍后将它们考虑在内。你有isnan 函数来检查NaN。如果您真的想删除 NaN,您可以使用函数 readtable 中的参数对 ('EmptyValue', value) 将它们替换为您选择的某个值
  • NaN 面临的主要问题是我无法通过 measureCells{{nameOfRow},:} 获取一行数据,因为 Matlab 告诉我并非所有值该行与 NaN 的类型相同,似乎是 cell 类型,而不是双 NaN。因此,将所有 NaN 转换为 double 类型的 NaN 也可以解决我的问题。

标签: matlab nan


【解决方案1】:

要么:

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) 函数的工作原理。这些示例非常详尽,应该可以帮助您找到最适合您需求的解决方案。

您拥有的最后一个解决方案是使用EmptyValue 参数在对readtable 函数的调用中发现(并以您喜欢的方式操作)NaN 值。但这仅适用于数字数据。

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 2022-11-15
    • 1970-01-01
    • 2014-03-13
    • 2017-06-21
    • 2021-12-22
    • 1970-01-01
    • 2018-01-23
    • 2014-01-27
    相关资源
    最近更新 更多