Как сделать так, чтобы тексты могли писать NaN, когда в числовом столбце встречается нечисловое значение? - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть CSV с количеством столбцов, второй столбец является единственным со строками, так как он называет переменные.Я открываю csv с помощью fopen и хочу сохранить его содержимое в ячейке с textcan.Однако в числовых столбцах есть несколько нечисловых значений (ошибок), все с запятыми в них.Я хочу, чтобы тексты могли писать вместо них NaN, а не просто останавливаться.Вот что у меня есть:

fileID = fopen(input,'r');
cell = textscan(fileID, '%n %s %n %n %n %n %n %n %n','Delimiter',',','HeaderLines',1,'ReturnOnError',false, 'EmptyValue',NaN, 'TreatAsEmpty','*,*');
fclose(fileID);

Любая помощь будет приветствоваться.

1 Ответ

0 голосов
/ 23 декабря 2018

при условии, что ваши данные выглядят следующим образом:

col1,col2,col3,col4,col5,col6,col7,col8,col9
1,n1,1,1,fgd,1,1,1,1
2,n2,2,2,2,2,dfdf,2,2
3,n3,3,3,3,3,3,str1,223,,3

и у вас нет выбора изменить данные

  • изменить разделитель с запятой на точку с запятой
  • или окружить данные двойными кавычками

textscan() не может быть достаточно умным, чтобы обнаружить это.Я бы предложил такой подход, как:

fid = fopen('c.csv');
data = char(fread(fid))';
fclose(fid);
data = split(data);

теперь вы можете анализировать данные строка за строкой (ячейка за ячейкой).

{'col1,col2,col3,col4,col5,col6,col7,col8,col9'}
{'1,n1,1,1,fgd,1,1,1,1'                        }
{'2,n2,2,2,2,2,dfdf,2,2'                       }
{'3,n3,3,3,3,3,3,str1,223,,3'                  }

или

fmt = '%s %s %s %s %s %s %s %s %s';
data = textscan(fid, fmt, ...

где-то в вашем цикле синтаксического анализа вы можете использовать str2double, что приведет к NaN, если оно не является числовым:

>> str2double('str')

ans =

NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...