【问题标题】:D3: ignore certain row in .csvD3:忽略 .csv 中的某些行
【发布时间】:2013-06-10 01:11:22
【问题描述】:

我有一个 .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?

【问题讨论】:

  • This question 应该会有所帮助。
  • @LarsKotthoff CSV 文件中有一行额外的标题,我看不出拼接在这里有什么作用。也许我错过了什么(?)。
  • d3.csv 返回一个您正在迭代的数组(使用forEach)。数组的每个元素都是一行。所以要去掉第一行,只需删除数组的第一个元素。
  • @LarsKotthoff 但是d3.csv 返回的东西是对象数组,而不是数组数组,并且每个对象都将具有第一行标题的键(“开始日期”、“用户 ID”等)而不是第二行标题,我认为这是 OP 想要的。
  • 啊,好吧,那是有道理的。尽管即使那样,该方法仍会起作用,因为之后的循环无论如何都会重新格式化。

标签: javascript csv d3.js


【解决方案1】:

d3.csv() 函数同时进行加载解析,而不会给您干预的机会。由于您需要进行干预,因此您需要将 csv 作为纯文本加载——不对其进行解析——然后删除第一行,然后将其作为字符串传递给 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));
})

【讨论】:

    【解决方案2】:

    对于那些想要忽略 csv 中的某些行的人,可以使用以下 sn-p。

    //Read the data
    d3.csv("abc.csv?"+Math.random(),
      function(d){
        //if current row's value column is blank, then ignore it. Otherwise do further process.
        if(d.value!=''){ 
          return { date : d3.timeParse("%Y-%m-%d %H:%M:%S")(d.date), value : d.value }
        }
      },
    

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2017-03-29
      • 2014-12-15
      • 2016-04-25
      • 1970-01-01
      • 2017-07-19
      • 2018-03-10
      • 1970-01-01
      • 2012-12-22
      相关资源
      最近更新 更多