2

我有以下示例数据

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');
4

2 回答 2

1

三个问题:

1) 提供的样本数据不是 csv。csv 代表逗号分隔的变量。您的示例数据似乎由制表符或空格分隔。更新:我看到您已经编辑了您的样本,因此数据现在是 csv。我已经相应地编辑了我的解决方案。

2)如果您希望使用行和列输入参数,csvread它们应该作为从零开始的整数值行和列参数输入,而不是“excel”类型的字符串。

3)从您提供的样本中,您似乎想要获取第一列中的日期。如果您想使用csvreaddlmread因为这两个函数都只能处理数字数据,这是一个问题(请注意,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 数字日期格式,然后将其与其余数据组合成一个数字矩阵,以供分析。

于 2012-10-29T04:54:00.167 回答
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”之间的空格。

于 2013-10-28T18:05:01.803 回答