Octave读取CSV混合类型数据后绘制柱状图报错求助
问题描述
现有如下格式的CSV文件:
name,mi,km,sp Aa,2.6,4.1843024285,3 Bb,12.7,20.4387080162,5 Cc,104,167.3720971402,9 Dd,8816,14188.0039268069,40 Ee,11669,18779.4711685469,39 Ff,77793,125195.93800795,84 Gg,103723,166926.307996846,76
其中第一列为字符串,第二、三列为实数,第四列为整数。使用Octave脚本读取数据:
pkg load io data = csv2cell("data.csv", 1) sp = data(:,4) % 读取'sp'列
调用bar(sp)绘制柱状图时触发错误:
error: bar: Y must be numeric
尝试以下方法均未解决:
- 使用
sn = str2num(sp),报错:error: str2num: S must be a string or string array - 使用
datan = str2double(data),返回全NaN矩阵。
解决方案
csv2cell读取混合类型CSV后,数值列会以字符串类型的cell元素存储,并非直接的数值类型,因此需要单独对目标列进行类型转换:
针对第四列的cell数组,使用
cellfun遍历每个元素,调用str2num或str2double完成转换:% 转换sp列的cell元素为数值数组 sp_num = cellfun(@str2num, sp); % 或使用str2double,效果一致 % sp_num = cellfun(@str2double, sp);验证转换后的类型,再调用柱状图函数:
bar(sp_num);
为什么之前的方法失效?
str2num(sp)报错:str2num仅接受字符串/字符串数组,不支持直接传入cell数组;str2double(data)返回全NaN:data第一列是无法转换为数值的纯字符串,导致整个矩阵转换失败,返回全NaN。
内容的提问来源于stack exchange,提问作者maurobio
相关产品推荐
相关产品推荐

