从csv文件读取数据到MATLAB时出错

时间:2012-10-29 03:36:44

标签: excel matlab csv

我有以下示例数据

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

2 个答案:

答案 0 :(得分: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数字日期格式,然后将其与其余数据组合成一个数值矩阵,准备分析。

答案 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”之间的空间。