我有一个.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?
答案 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.]])