MATLAB Answers

csvインポート時に​、日付をシリアル値で​インポートしたい

4 views (last 30 days)
Yu
Yu on 24 Aug 2021
Commented: Yu on 26 Aug 2021
csvをインポートする際に、日付の列のみをシリアル値で読み込みたいのですが、方法が分かりませんでした。
行列、テーブル双方の場合でも可能な場合、それぞれの方法をご教示頂けますと嬉しいです。
現状思いつくのですと、以下のような手順になり、もっと簡単な方法がないかと思っています。
①csvをtableでインポート(日付はdatetime指定)
②日付をdatenumでシリアル値に変換
③日付以外のデータと再度合体

Accepted Answer

Hernia Baby
Hernia Baby on 24 Aug 2021
楽したいのでアプリを活用します
以下のコードはインポート機能を使ってそれをライブスクリプト化したものです
MATLABのフォルダーからBook4.csvをダブルクリックしてインポートアプリを立ち上げてください
ライブスクリプトの生成で以下のコードが生成されます
opts = delimitedTextImportOptions("NumVariables", 6, "Encoding", "UTF-8");
% 範囲と区切り記号の指定
opts.DataLines = [2, Inf];
opts.Delimiter = ",";
% 列名と型の指定
opts.VariableNames = ["Ping_index", "Distance_gps", "Distance_vl", "Ping_date", "Ping_time", "Ping_milliseconds"];
opts.VariableTypes = ["double", "double", "double", "datetime", "datetime", "double"];
% ファイル レベルのプロパティを指定
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% 変数プロパティを指定
opts = setvaropts(opts, "Ping_date", "InputFormat", "yyyy/MM/dd");
opts = setvaropts(opts, "Ping_time", "InputFormat", "HH:mm:ss");
% データのインポート
Book4 = readtable("Book4.csv", opts);
% 一時変数のクリア
clear opts
ここでシリアル値を付け加えます(コードを書いたのはここだけ)
Book4.Ping_date_S = datenum(Book4.Ping_date);
Book4
Book4 = 5×7 table
Ping_index Distance_gps Distance_vl Ping_date Ping_time Ping_milliseconds Ping_date_S __________ ____________ ___________ __________ _________ _________________ ___________ 151 0.38823 526.1 2021/07/07 12:12:58 432 7.3834e+05 152 0.39168 526.1 2021/07/07 12:13:01 433 7.3834e+05 153 0.39514 526.11 2021/07/07 12:13:04 434 7.3834e+05 154 0.3986 526.11 2021/07/07 12:13:07 436 7.3834e+05 155 0.40207 526.11 2021/07/07 12:13:10 437 7.3834e+05
  1 Comment
Yu
Yu on 26 Aug 2021
返信が遅くなりすみません。
なるほど、既存の日付と置き換えるのではなく、シリアル値の列を新たに追加するということですね。
Tableへの新たな列の追加方法についても勉強になりました。(新たにテーブルを作って、2つのテーブルをくっつけるというやり方をしていました)
ご回答くださりありがとうございました!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!