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

如何在MATLAB中提取带双引号的CSV数值并实现绘图?

解决MATLAB读取带全双引号CSV时数值变成字符的问题

嘿,我之前也处理过这种所有内容都被双引号包裹的CSV文件,给你几个亲测有效的方案:

方案1:用readtable读取后批量转换数值列

这种方法适合已经明确哪些列是数值型的情况,先把所有内容读成string类型,再批量转数值:

% 读取CSV文件,指定TextType为string,自动处理引号
raw_table = readtable('full_webstats_credit_gap_dataflow.csv', 'TextType', 'string');

% 假设从第2列开始是数值列(根据你的实际数据结构调整)
numeric_col_indices = 2:width(raw_table);
% 对数值列应用str2double转换
raw_table(:, numeric_col_indices) = varfun(@str2double, raw_table(:, numeric_col_indices));

% 现在可以直接提取数值数据绘图了
plot(raw_table{:, 2});

原理是readtable用TextType='string'读取时,会自动去掉双引号得到纯净字符串,str2double能直接把这些字符串转成数值。

方案2:用textscan配合cellfun转换

如果需要更精细控制读取过程,可以用textscan先按带引号的字符串读取,再批量转换:

fid = fopen('full_webstats_credit_gap_dataflow.csv', 'r');

% 先读取表头(假设表头有6列,根据你的文件实际列数调整)
header = textscan(fid, '%q', 6);
% 读取数据行,每列都用%q读取(自动去掉引号)
data_cells = textscan(fid, repmat('%q', 1, 6), 'Delimiter', ',');
fclose(fid);

% 将数值列的元胞数组转成数值矩阵(这里假设第2到第6列是数值)
numeric_matrix = cellfun(@str2double, [data_cells{2:end}]);

% 绘图示例
plot(numeric_matrix(:, 1));

%q格式符会专门处理带双引号的字段,读取后自动去除引号,得到的字符串可以直接用str2double转换。

方案3:预处理文件去掉所有双引号

如果文件所有内容都带引号,最简单的方式是先把所有双引号删掉,再用普通方法读取:

% 读取整个文件内容
file_text = fileread('full_webstats_credit_gap_dataflow.csv');
% 替换掉所有双引号
clean_text = strrep(file_text, '"', '');
% 写入临时文件
temp_file = 'temp_cleaned.csv';
fid = fopen(temp_file, 'w');
fwrite(fid, clean_text);
fclose(fid);

% 现在可以用readtable或csvread正常读取
clean_table = readtable(temp_file);
% 用完删除临时文件(可选)
delete(temp_file);

% 绘图
plot(clean_table{:, 2});

这个方法最省心,适合所有字段都被引号包裹的场景,处理后文件就和普通CSV完全一样了。

注意事项

  • 转换前先确认哪些列是数值列,别把文本列(比如"Private non-financial sector")拿去转数值,会得到NaN;
  • 如果有缺失值,str2double会返回NaN,可以用isnan检查并做相应处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:46:01