Importing csv with dates
5 ビュー (過去 30 日間)
古いコメントを表示
Hi all. I am trying to import a csv file which includes numbers and dates using Import data > numeric matrix > Generate Function. All goes well, except for the Dates column. The original format is dd/mm/yyyy, but the imported file replaces all the dates as 1,2,3, etc. Restrictions: -I am not allowed to make any changes to the file before importing. -I tried to import using "column vectors" instead of "Numeric Matrix" but this brings the dates in "datetime" vector instead of "double", which causes me lots of troubles when I try to do other functions and codes, so I am trying to keep everything as "double". Many thanks
7 件のコメント
Walter Roberson
2018 年 8 月 25 日
Importing dates with the correct format contradicts your requirement to keep everything double.
When the date 18/07/2017 is imported and you want to get a double out of that, then what value would you want that double to have? Do you want Julian Date? Do you want Excel Date Number (1900)? Do you want Excel Date Number (1904) ? Do you want MATLAB Serial Date Number? Do you want leap years to be handled, or do you want the approximation of fixed length years?
It would be so much easier if you were willing to use datetime objects.
採用された回答
D.J
2018 年 8 月 25 日
編集済み: Walter Roberson
2018 年 8 月 25 日
11 件のコメント
dpb
2018 年 8 月 27 日
It came to me somewhat later that it really is a more subtle error and since my chastisement came out a little more harsh than intended :) that it made some sense to outline the root cause and how it came to be so then seemed a natural extension. I'm sure it will trip up a lot of new users in one form or another with similar not unreasonable expectations that are not met owing to the class difference of the inputs.
その他の回答 (2 件)
dpb
2018 年 8 月 25 日
編集済み: dpb
2018 年 8 月 25 日
t=readtable('test-data.csv');
plot(t.Date,[t.MinimumTemperature__C_ t.MaximumTemperature__C_])
legend('Tmin','Tmax')
ylabel('T, C')
created
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194216/image.jpeg)
datetimes are your friends... :)
And, if you really, really think you must have every day shown on the axis,
hAx=gca;
hAx.XTick=t.Date;
hAx.XAxis.TickLabelFormat='d';
hAx.XAxis.FontSize=8;
after the above produces
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194218/image.jpeg)
Are you still sure you really want to try to convert dates to doubles???
Did I mention datetime is your friend, yet?
0 件のコメント
D.J
2018 年 8 月 25 日
2 件のコメント
dpb
2018 年 8 月 25 日
編集済み: dpb
2018 年 8 月 25 日
No problem, glad to help... :)
There's so much in Matlab it's hard to know where to start to get to end quickest route, granted. But as a general rule, when you start running into issues such as you were, it's generally a good indication you're not using the right approach so stepping back and looking for alternatives is a good idea when that happens instead of just trying to beat Matlab into submission in an arbitrary direction.
The builtin datetime -aware plot routines are a relatively recent introduction to Matlab (prior to that there were datenum and a klunky companion routine to convert the internal representation as doubles to date strings) but it is one thing that has been a real step forward for ease of use for most uses.
The table is another...
参考
カテゴリ
Help Center および File Exchange で Line Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!