【问题标题】:Read CSV file in Matlab to matrix在 Matlab 中读取 CSV 文件到矩阵
【发布时间】:2013-06-23 21:51:30
【问题描述】:

我需要在 Matlab 中读取一个 CSV 文件。该文件主要是数字(除了第一列,它实际上有 178 列)并且有缺失值,用 NA 表示。例如,这里有两行:

24-MAR-2005 , 2.145202 , 2.192237 , 2.238725 , 2.284657 , 2.330028 , 2.374829 , 2.419056 , ...

2005 年 3 月 25 日,不适用,不适用,不适用,不适用,不适用,不适用,不适用,...

我想将这些 NA 读取为 NaN 并将整体转换为矩阵,但我无法正确完成。

顺便说一句,我真的不需要日期(即第一列)。

这是我尝试过的:

filename = 'foo.csv';
fid = fopen(filename,'rt');
[data]=textscan(fid, '%s %f' , 178,'delimiter',',',...
                                   'TreatAsEmpty','NA',...
                                   'EmptyValue', NaN);

【问题讨论】:

  • 我试图扫描,处理空的'NA'并将空值设置为NaN filename ='foo.csv'; fid = fopen(文件名,'rt'); [data]=textscan(fid, '%s %f' , 178,'delimiter',',','TreatAsEmpty','NA', 'EmptyValue', NaN);

标签: matlab csv matrix nan


【解决方案1】:

%*s 可以跳过日期,但需要指定 178 %f 和分隔符:

textscan(fid, ['%*s' repmat('%f',1,178)],'Delimiter',',','CollectOutput',true)

【讨论】:

  • 谢谢!这与我已经尝试过的相结合,效果很好。
【解决方案2】:

我会提供这个,但并不多

% read in the entire file
fid = fopen('tmp.csv');
A = fread(fid);
% convert to a character array
B = char(A)';
% create a cell array with one element for every line in the file
lineData = regexp(B,'\n','split');
% for every line in the data, parse out all the data into a
% cell array
data = cell(1,length(lineData));
for ii=1:length(lineData)
  pData = textscan(lineData{ii},'%s','Delimiter',',');
  % remove any spaces from the elements
  data{ii} = cellfun(@(x) strrep(x,' ',''), pData{1},'UniformOutput',false);
end

【讨论】:

    猜你喜欢
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2022-07-05
    • 2015-02-01
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多