You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Octave中将CSV含空格的timestamp转换为时间序列数据?

在Octave中处理CSV中的意大利语时间戳并转换为时间序列

核心问题说明

你用strftime没成功是因为搞反了函数用途:strftime是将时间格式转为字符串,而你需要的是将字符串时间解析为可用于时间序列的格式,应该用strptime。另外你的时间戳用的是意大利语月份缩写(比如gen代表一月),需要先处理才能被Octave识别。

分步解决方案

1. 导入CSV并提取时间戳列

假设你已经用csv2cell导入了数据,先提取表头外的时间戳字符串:

csv_data = csv2cell("你的文件名.csv");
% 跳过第一行表头,提取所有时间戳字符串
timestamp_strings = csv_data(2:end, 1);

2. 替换意大利语月份缩写为英文

Octave的strptime默认依赖系统区域设置,直接识别不了意大利语月份,所以先替换为英文缩写:

% 建立意大利语-英文月份映射
month_map = containers.Map(...
    {"gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"}, ...
    {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"});

% 批量替换所有时间字符串中的月份
timestamp_strings_en = timestamp_strings;
for it_month = keys(month_map)
    timestamp_strings_en = strrep(timestamp_strings_en, it_month, month_map(it_month));
end

3. 解析时间字符串为时间结构体

用strptime按时间格式解析:

% 格式说明:%d=日,%b=月份缩写,%Y=年,%H:%M:%S=时分秒,%Z=时区
time_structs = strptime(timestamp_strings_en, "%d %b %Y %H:%M:%S %Z");

4. 转换为数值时间(用于时间序列分析)

将时间结构体转为Octave的数值日期格式(datenum),方便后续分析或绘图:

% 转为datenum格式(自0000年1月1日的天数)
numeric_time = datenum(time_structs);

% 可选:转为Unix时间戳(自1970-01-01 UTC的秒数)
unix_time = (numeric_time - datenum(1970, 1, 1)) * 86400;

5. 同步处理其他数据列

你的CSV中数值用逗号做小数点,需要替换为点后转成数值:

humidity = str2double(strrep(csv_data(2:end, 2), ",", "."));
temperature = str2double(strrep(csv_data(2:end, 3), ",", "."));
pressure = str2double(strrep(csv_data(2:end, 4), ",", "."));

示例:绘制时间序列图

用处理后的时间和数据绘图,自动格式化时间轴:

plot(numeric_time, temperature);
datetick("x", "HH:MM:SS"); % 设置x轴显示时分秒
xlabel("时间");
ylabel("温度 (°C)");
title("LOC20 温度时间序列");

内容的提问来源于stack exchange,提问作者Alberto Scrofani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:05:26