matlab - 如何将此 .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
你可以看到这也不起作用。
解决方案
如果您确定所有涉及的日期不超过 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
推荐阅读
- android - `alpha` 动画期间的奇怪阴影行为
- fullcalendar - Fullcalendar 年视图(12 月未显示)
- css - 我们何时以及为什么应该在角度中使用视图封装
- c# - 有没有办法在 Roslyn 中进行大规模代码重构?
- python - 最小化 gcloud CLI 安装的磁盘空间
- ios - 为什么我的位置:sticky 在 iOS 上不起作用?
- sql - 如何在 psql 中转换 unix_timestamp 整数?
- r - 在 R 中数值求解 Lotka-Volterra ODE
- spring-boot - Thymeleaf th:每个都找不到对象
- java - 使用改造 2 在回收站视图上显示项目