导入CSV后如何修改列标题?

时间:2019-02-20 22:40:38

标签: javascript csv d3.js

我正尝试使用d3.csv()导入csv文件,如下所示:

d3.csv("mydata.csv", function(d) { 
console.log(d.columns);
}

这将输出“时间”,“比率”,“ id”。在将此数据连接到topojson文件之前,我想更改程序中的第一列和最后一列的标题名称。有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

该属性columns只是由d3.csv在数据数组中创建的一个属性:

const csv = `foo,bar,baz
12,14,13
2,16,4
17,42,10`;

const data = d3.csvParse(csv);

console.log(data.columns);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

您可以用它做任何想做的事情:

const csv = `foo,bar,baz
12,14,13
2,16,4
17,42,10`;

const data = d3.csvParse(csv);

data.columns[0] = "I'm a new value!";

console.log(data.columns);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

您甚至可以完全摆脱它:

const csv = `foo,bar,baz
12,14,13
2,16,4
17,42,10`;

const data = d3.csvParse(csv);

data.columns.length = 0;

console.log(data.columns);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

这里的真正问题是:为什么?如API所述,该属性包含CSV文件中的所有标头:

  

返回的数组还公开了一个columns属性,该属性包含按输入顺序的列名。

因此,columns属性对于按原样访问数据数组非常有用。话虽如此,更改该属性毫无意义,因为您不再具有标头名称,并且代码中的内容可能会进一步破裂。因此,如果您想更改标题名称,我相信更改CSV文件本身是一个更好的选择。