首页 > 解决方案 > 如何将此 .csv 文件中的日期正确导入 Matlab?

问题描述

我有一个 .csv 文件,其中第一列包含日期,其中的一个片段如下所示:

date,values
03/11/2020,1
03/12/2020,2
3/14/20,3
3/15/20,4
3/16/20,5
04/01/2020,6

我想将这些数据导入 Matlab(我认为最好的方法可能是使用该readtable()函数,请参见此处)。我的目标是将日期作为日期时间数组带入 Matlab 。正如您在上面看到的,问题在于原始 .csv 文件中的日期格式不一致。其中一些是格式mm/dd/yyyy,其中一些是mm/dd/yy.

简单地调用data = readtable('myfile.csv').csv 文件会导致以下结果,这是不正确的:

'03/11/2020'    1
'03/12/2020'    2
'03/14/0020'    3
'03/15/0020'    4
'03/16/0020'    5
'04/01/2020'    6

有谁知道在导入中自动考虑此类数据的方法?

谢谢!

我的版本:Matlab R2017a

编辑 - - - - - - - - - - - - - - - - - - - -

按照 Max 的建议,我尝试使用以下命令为 read 命令指定一些输入选项:

T = readtable('example.csv',...
              'Format','%{dd/MM/yyyy}D %d',...
              'Delimiter', ',',...
              'HeaderLines', 0,...
              'ReadVariableNames', true)

这导致:

    date       values
    __________    ______

    03/11/2020    1     
    03/12/2020    2     
    NaT           3     
    NaT           4     
    NaT           5     
    04/01/2020    6     

你可以看到这也不起作用。

标签: matlabcsvimport

解决方案


如果您确定所有涉及的日期不超过 100 年,您可以轻松应用上个世纪使用的枢轴方法(在 2K 错误警告世界该方法的危险之前)。

他们过去只用 2 位数字编码日期,知道这87实际上意味着1987. 用户(或计算机)会自动添加缺失的年份。

在您的情况下,您可以阅读完整的表格,解析日期,然后很容易检测出哪些日期不一致。识别它们,纠正它们,然后你就可以开始了。

以你的例子:

a = readtable(tfile) ;                  % read the file
dates = datetime(a.date) ;              % extract first column and convert to [datetime]
idx2change = dates.Year < 2000 ;        % Find which dates where on short format
dates.Year(idx2change) = dates.Year(idx2change) + 2000 ; % Correct truncated years
a.date = dates                          % reinject corrected [datetime] array into the table

产量:

a = 
       date        values
    ___________    ______
    11-Mar-2020    1     
    12-Mar-2020    2     
    14-Mar-2020    3     
    15-Mar-2020    4     
    16-Mar-2020    5     
    01-Apr-2020    6     

推荐阅读