D3:忽略.csv中的某一行

时间:2013-06-13 15:09:58

标签: javascript csv d3.js

我有一个.csv文件,如下所示:

The Start Date, The User Id, The User Name,
date, id, name,
12-12-12, 12345, John Doe
01-02-13, 67891, Jane Doe

第一行是第二行键的说明。我正在加载.csv文件,如下所示:

d3.csv("data.csv", function(error, data) {
  data.forEach(function(d) {
    d.date = parseDate(d.date);
    d.id   = formateID(d.id);
    d.name = formatename(d.name);
    d.close = +d.close;
  });

我希望将第一行(描述)与我的数据模型分开,因为我仍计划在路上使用它,但是我不允许修改.csv文件的格式。有没有办法我只能捕获这些信息:

date, id, name,
12-12-12, 12345, John Doe
01-02-13, 67891, Jane Doe

来自csv?

2 个答案:

答案 0 :(得分:9)

d3.csv()函数执行加载解析,而不会让您有机会进行干预。由于您需要进行干预,因此您需要将csv作为纯文本加载 - 而不进行解析 - 然后删除第一行,然后将其作为String传递到csv模块进行解析。

要加载,请使用d3.xhr() 要进行解析,请使用d3.csv.parse()

你应该得到这样的东西:

d3.xhr('data.csv').get(function (err, response) {
  var dirtyCSV = response.responseText;
  var cleanCSV = dirtyCSV.split('\n').slice(1).join('\n');
  var parsedCSV = d3.csv.parse(cleanCSV);
})

修改

这是一个比上述更低成本的转换(尚未经过测试/调试):

d3.xhr('data.csv').get(function (err, response) {
  var dirtyCSV = response.responseText;
  var firstEOL = dirtyCSV.indexOf('\n');
  var parsedCSV = d3.csv.parse(cleanCSV.substring(firstEOL+1));
})

答案 1 :(得分:0)

对于那些想忽略csv中某些行的用户,可以使用以下代码段。

array([[ 0.,  6.,  0.,  0.,  0.],
       [ 0., 15.,  0.,  0.,  0.],
       [ 0., 12.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])