将包含数字文本的列的内容转换为数字

时间:2017-11-10 19:25:13

标签: matlab matlab-table

我有一个由文本或数字组成的csv文件。但是有些列已损坏,如下图所示("<<&#; K.O)。当我通过Matlab打开csv文件(没有导入)时,它将它们转换为数字,并根据我的需要定义未定义的值,例如"<<" K.O作为NaN。但是当我通过脚本阅读文件时,我写道:

opts = detectImportOptions(filedir);
table = readtable(filedir,opts);

它将它们作为char数组读取。由于我有许多不同的csv文件(列不同),我想自动而不是使用文本扫描(因为它需要文件格式,我的文件格式对于每个csv文件是不同的)。有没有办法将包含数字文本的列的内容自动转换为数字?

data

2 个答案:

答案 0 :(得分:0)

假设您的数据存储在table中,您可以尝试使用str2double将每列字符数组转换为数值。任何不能转换为数值的值(空条目,单词,非数字字符串等)都将转换为NaN

由于您希望自动执行转换,因此我们必须做出一个关键假设:任何转换为​​所有 NaN值的列都应保持不变。在这种情况下,数据可能是所有不可转换的字符数组,或者已经是数字。根据该假设,此通用转换可应用于任何表T

for varName = T.Properties.VariableNames
  numData = str2double(T.(varName{1}));
  if ~all(isnan(numData))
    T.(varName{1}) = numData;
  end
end

作为测试,以下示例数据:

T = table((1:5).', {'Y'; 'N'; 'Y'; 'Y'; 'N'}, {'pi'; ''; '1.4e5'; '1'; 'A'});

T = 

    Var1    Var2     Var3  
    ____    ____    _______

    1       'Y'     'pi'   
    2       'N'     ''     
    3       'Y'     '1.4e5'
    4       'Y'     '1'    
    5       'N'     'A'

将通过以上代码转换为以下内容:

T = 

    Var1    Var2     Var3 
    ____    ____    ______

    1       'Y'        NaN
    2       'N'        NaN
    3       'Y'     140000
    4       'Y'          1
    5       'N'        NaN

答案 1 :(得分:0)

据我所知,你的评论就是这样:

.characters-main