我有一个由文本或数字组成的csv文件。但是有些列已损坏,如下图所示("<<&#; K.O)。当我通过Matlab打开csv文件(没有导入)时,它将它们转换为数字,并根据我的需要定义未定义的值,例如"<<" K.O作为NaN。但是当我通过脚本阅读文件时,我写道:
opts = detectImportOptions(filedir);
table = readtable(filedir,opts);
它将它们作为char数组读取。由于我有许多不同的csv文件(列不同),我想自动而不是使用文本扫描(因为它需要文件格式,我的文件格式对于每个csv文件是不同的)。有没有办法将包含数字文本的列的内容自动转换为数字?
答案 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