D3尝试更改csv import

时间:2016-05-21 14:10:17

标签: javascript csv d3.js

我正在导入一个不太干净的CSV文件,其中包含一些我必须跳过的行,并且我已经能够成功地使用过滤器。 但是,许多字段包含不需要的字符,我无法成功删除它们。

数据带有其他字符和空格:

Amount:"$286.28"
CheckDate:" 12/31/15"

这就是我的尝试:

d3.csv("DATA2015.csv", function(csv) {
    csv.CheckDate = csv.CheckDate.substring(1);
    csv.Amount = +csv.Amount.substring(1);
    csv.Fee=+csv.Fee;
    csv = csv.filter(function(row) {
        return row['Amount'] != '';
    })
    console.log(csv[0]);
    console.log(csv[1]);
    console.log(csv[2]);
    console.log(csv[3]);
    console.log(csv[4]);
});

我得到一个未捕获的TypeError:无法读取子串(1)行上未定义的属性'substring'。

非常感谢任何想法。

2 个答案:

答案 0 :(得分:2)

我可能会过度简化这一点,但不是csv数组? 所以运行csv.CheckDate.substring(1)没有意义。相反,你想要遍历数组的每个成员和row.CheckDate.substring(1)等等。

考虑到这一点,试试这个:

d3.csv("DATA2015.csv", function(csv) {
  csv.forEach(function(row) {
    row.CheckDate = row.CheckDate.substring(1);
    row.Amount = +row.Amount.substring(1);
    row.Fee = +row.Fee;
  });

  csv = csv.filter(function(row) {
    return row.Amount !== '';
  });

  console.log(csv[0]);
  console.log(csv[1]);
  console.log(csv[2]);
  console.log(csv[3]);
  console.log(csv[4]);
});

答案 1 :(得分:0)

您可以在创建子字符串之前进行检查。像这样的东西。

csv.Amount = csv.Amount || 'Your string when data is undefined';

然后进行字符串操作。