使用d3加载无表头CSV文件时如何调用csvParseRows处理?
问题1:无表头CSV需要使用csvParseRows处理的说法是否正确?
该说法正确。d3.csv() 方法默认会将CSV文件的第一行识别为表头,最终返回的是对象数组,数组中每一个元素的key对应表头字段。对于没有表头的CSV文件,使用d3.csvParseRows()解析可以直接得到二维数组,每一个子数组对应CSV中的一行数据,不会自动生成表头字段,更符合无表头CSV的使用需求。
问题2:现有代码的修改方案
你可以将无表头的sample2.csv改用d3.text()加载,加载完成后手动调用d3.csvParseRows()解析即可,修改后的代码如下:
d3.queue() .defer(d3.csv, "sample1.csv") .defer(d3.text, "sample2.csv") // 文本形式加载无表头CSV .defer(d3.csv, "sample3.csv") .await(function(error, sample1, sample2Raw, sample3) { if (error) throw error; // 解析无表头CSV,可选添加行转换函数做类型处理 const sample2 = d3.csvParseRows(sample2Raw, row => { // 示例:将每行的两个字段从字符串转为数值类型 return [Number(row[0]), Number(row[1])]; }); // 这里继续写你的后续业务逻辑 })
如果你不需要做类型转换,也可以直接写成const sample2 = d3.csvParseRows(sample2Raw),得到的是字符串类型的二维数组。
内容的提问来源于stack exchange,提问作者RyanIs
相关产品推荐
相关产品推荐

