我有以下示例数据
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');
答案 0 :(得分:1)
三个问题:
1)提供的样本数据不是csv。 csv代表逗号分隔变量。您的示例数据似乎由制表符或空格分隔。 更新:我看到您已经编辑了样本,因此数据现在是csv。我已经相应地编辑了我的解决方案。
2)如果你想使用csvread
的行和列输入参数,它们应该作为从零开始的整数值行和列参数输入,而不是“excel”类型字符串。
3)从您提供的示例中,您似乎想要获取第一列中的日期。如果您想使用csvread
或dlmread
,这是一个问题,因为这两个函数都只能处理数字数据(请注意,10/24/2011是一个字符串)。
所以,我将假设您向我们展示的内容代表了您的文件。鉴于此,将其导入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}];
在第一行,我打开文件进行阅读。在第二行,我扫描数据。请注意格式字符串'%s%f%f%f%f%f%f'
。这表示第一列是字符串格式%s
,接下来的6列是浮点(我们可以将其更改为其他数字类型,但浮点数现在最简单)。在第三行,我关闭文件。在最后一行中,我将日期字符串转换为matlab数字日期格式,然后将其与其余数据组合成一个数值矩阵,准备分析。
答案 1 :(得分:0)
在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
请注意,我忽略了一个警告,即变量名被修改为有效的MATLAB标识符。这是因为“Adj Close”之间的空间。