从csv文件读取数据到MATLAB时出错
我有以下示例数据
Date,Open,High,Low,Close,Volume,Adj Close 10/24/2011,181.51,183.39,180.62,182.25,5890600,182.25 10/21/2011,179.11,181.67,178.75,181.63,8054200,181.63 10/20/2011,178.13,179.24,176.17,177.25,7513800,177.25
我正在从CSV文件读取数据到MATLAB。
data = csvread('filename.csv','A1:G12542');
我得到以下错误。 任何想法如何绕过这个问题?
??? Error using ==> dlmread at 145 Header lines must be integer-valued. Error in ==> csvread at 50 m=dlmread(filename, ',', r, c); Error in ==> Q11 at 1 data1 = csvread('ibm.csv','A1:G12542');
三个问题:
1)提供的样本数据不是csv。 csv代表逗号分隔的variables。 您的示例数据似乎被选项卡或空白分隔。 更新:我看到你已经编辑你的示例,使数据现在csv。 我相应地编辑了我的解决scheme。
2)如果你想使用行和列input参数csvread
它们应该input为零基于整数值的行和列参数,而不是“excel”types的string。
3)从您提供的样本中看来,您想要获得第一列中的date。 如果您想使用csvread
或dlmread
,这是一个问题,因为这两个函数都只能处理数字数据(请注意,2011年10月24日是一个string)。
所以,我会假设你向我们展示的是你的文件的代表。 鉴于此,将其导入matlab的方法如下:
fid1 = fopen('YourFilePathHere', 'r'); D = textscan(fid1, '%s%f%f%f%f%f%f', 'Delimiter', ',', 'HeaderLines', 1); fclose(fid1) D = [datenum(D{1}, 'mm/dd/yyyy'), D{2}, D{3}, D{4}, D{5}, D{6}, D{7}];
在第一行,我打开文件阅读。 在第二行我扫描数据。 请注意格式string'%s%f%f%f%f%f%f'
。 这就是说,第一列是string格式%s
,接下来的6列是浮点数(我们可以将其改为其他数值types,但浮点数现在是最简单的)。 在第三行我closures文件。 在最后一行中,我将datestring转换为matlab数字date格式,然后将其与其余数据合并为一个数字matrix,以供分析。
在13b中,您可以利用MATLAB表访问这些数据:
data = readtable('filename.csv'); data = Date Open High Low Close Volume AdjClose ____________ ______ ______ ______ ______ __________ ________ '10/24/2011' 181.51 183.39 180.62 182.25 5.8906e+06 182.25 '10/21/2011' 179.11 181.67 178.75 181.63 8.0542e+06 181.63 '10/20/2011' 178.13 179.24 176.17 177.25 7.5138e+06 177.25
注意,有一个警告,我忽略了variables名被修改为一个有效的MATLAB标识符的事实。 这是因为“closures”之间的空间。