【问题标题】:How to overwrite 'NaN' strings in a table using for-loop如何使用 for 循环覆盖表中的“NaN”字符串
【发布时间】:2017-05-26 14:48:43
【问题描述】:

我想使用 循环 / 或任何其他返回 NaN 的策略将表中的字符串 'NaN' 替换为 NaN,而其他所有内容保持不变。这是我的代码:

for k = 1:height(Z_24TimeSteps)
  if isnan(Z_24TimeSteps{k})
    Z_24TimeSteps{k} = nan;
  end
end

表:

我尝试的另一种策略:

Z_24TimeSteps(cellfun(@isnan,Z_24TimeSteps))=nan;

如何将这个原理用于“表格”格式?

【问题讨论】:

    标签: string matlab loops nan


    【解决方案1】:

    一种可能的方法是对表列使用逻辑索引,如下所示。

    Z_24TimeSteps.x1COVGY(strcmp(Z_24TimeSteps.x1COVGY,'NaN')) = {nan}
    

    对于多列,您可以如下循环列。

    colNames = Z_24TimeSteps.Properties.VariableNames;
    for k = 1:numel(colNames)
        if iscell(Z_24TimeSteps.(colNames{k}))
            Z_24TimeSteps.(colNames{k})(strcmp(Z_24TimeSteps.(colNames{k}),'NaN')) = {nan};
        else
            Z_24TimeSteps.(colNames{k})(strcmp(Z_24TimeSteps.(colNames{k}),'NaN')) = nan;
        end
    end
    

    【讨论】:

    • 谢谢,纳文。我已经尝试过这个,但很难在所有 281 列上进行 循环
    • 我更新了答案以遍历列。根据循环的类型,您可能需要进行一些额外的检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2016-07-17
    • 1970-01-01
    • 2020-11-21
    • 2013-08-13
    相关资源
    最近更新 更多