读取D3中没有标题行的csv/tsv

by0*_*by0 24 javascript csv tsv d3.js

我有CSV数据,看起来像:

数据

1,1,10
1,2,50
1,3,5
etc...
Run Code Online (Sandbox Code Playgroud)

我正在尝试阅读数据.但是,我的初始数据不包含标题行(如上所示),因此它将第一个数据行作为标题(1,1,10).有没有办法解决.我想在读取数据后设置标题名称

使用Javascript

d3.csv("data/testnh.csv", function(data) {
    console.log(data);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

mbo*_*ock 50

使用d3.text加载数据,然后使用d3.csvParseRows来解析它.例如:

d3.text("data/testnh.csv", function(text) {
  console.log(d3.csvParseRows(text));
});
Run Code Online (Sandbox Code Playgroud)

您可能还希望将列转换为数字,因为它们默认为字符串.假设他们是所有的数字,你可以说:

d3.text("data/testnh.csv", function(text) {
  var data = d3.csvParseRows(text).map(function(row) {
    return row.map(function(value) {
      return +value;
    });
  });
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

  • 与d3.csv不同,d3.csv.parse和d3.csv.parseRows是同步的,因此不需要回调.在调用d3.csv.parseRows后,返回值(上面的`data`)可以立即使用.唯一的异步部分是通过d3.text加载文件. (7认同)

egn*_*nha 11

自从Bostock在2012年的回答以来,d3.csv.parseRows允许一个可选的访问器功能,这使得他的答案可以更简洁地表达:

d3.text("data/testnh.csv", function(text) {
    var data = d3.csv.parseRows(text, function(d) {
        return d.map(Number);
    });
    // Now do something with data
});
Run Code Online (Sandbox Code Playgroud)