我正在导入一个不太干净的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'。
非常感谢任何想法。
答案 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';
然后进行字符串操作。