【问题标题】:Trouble importing csv-data within MATLAB在 MATLAB 中导入 csv 数据时遇到问题
【发布时间】:2019-04-11 15:14:39
【问题描述】:

我正在尝试读取一个 csv 文件,其中包含有关欧元/美元汇率的每日数据,包括指定年、月和日的日期。问题是使用 readtable(filename) 会在所有表条目周围加上单引号,因此完全阻碍了我使用数据。

检测导入选项:

opts = detectImportOptions('EUR_USD Historische Data.csv');

读入数据:

EUR_USD = readtable('EUR_USD Historische Data.csv');

减去日期并转换为日期时间变量:

dt = EUR_USD(:,1);
dates = datetime(dt,'InputFormat','yyyyMMdd'); 
% Does not work because of single quotes

我能够减去收盘价并使其可行,但我不确定这是否是一种优雅的做法:

closing_prices = str2double(table2array(EUR_USD(:,5)));

最终目标是使数据可用。我需要将两列与日期时间变量进行比较,如果两列之间的日期不匹配,我需要删除该条目,以便最终两列都匹配。

这是带有日期的向量: Dates vector wrong

我需要它看起来像这样: Dates vector correct

【问题讨论】:

  • 您可以在上面编写一些命令来从向量中删除' 字符,然后将其加载到datetime 函数中。
  • 不确定是什么命令
  • 由于datetime 可以使用字符串作为输入,您可以在调用datetime 之前运行for 循环,并通过您的for 循环中的这些命令删除' 字符:string_val = dt(i,1); date_val = string_val(2:end-1);
  • 让我发布一个答案。

标签: matlab csv variable-types


【解决方案1】:

我认为您需要做的就是删除' 字符,以便正确地将数据读入datetime。看下面的例子:

%stringz is the same as dt here: just the string data
T = table;
T.stringz = string(['''string1'''; '''string2'''; '''string3''']);
stringz = T.stringz;

%Run the for loop to remove the ' chars
for i = 1:length(stringz)
    strval = char(stringz(i,1));
    strval = strval(2:end-1);
    strmat(i,1) = string(strval);
end

%Then load data into datetime after this for loop
dates = datetime(strmat,'InputFormat','yyyyMMdd'); 

strmat 返回一个 3x1 字符串数组,字符串外部没有 ' 字符。

【讨论】:

  • 我仍然收到一个错误:“表”类型的输入参数的未定义函数“长度”。请改用 HEIGHT、WIDTH 或 SIZE 函数。
  • 基本上我使用了你的代码,但是用我的向量替换了 stringz 并用引号中的日期
  • 由于您没有提供任何数据,因此您可能需要尝试一下。
  • 我还发现在 MATLAB 中有一个选项“转换为分类数组”似乎也可以修复它。但是,如果您使用代码而不是手动执行此操作,则会出现错误。
  • 我添加了部分矢量的截图
猜你喜欢
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2013-12-14
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
相关资源
最近更新 更多