【问题标题】:How to skip or ignore rows above header?如何跳过或忽略标题上方的行?
【发布时间】:2018-11-26 21:34:51
【问题描述】:
Title: This is parsed file      
Job: Proj Doom

Flow,Value  
102,2   
103,3   
104,4   
105,5   
106,6

我是新来的,也是 D3 的新手。如果我采用上面的 csv 并删除标题上方的所有内容,我的 d3 图表就可以正常工作。 csv 是在测试后生成的,在加载到 D3 图形之前,我不能遍历每个文件并删除标题上方的行。 我想在不修改的情况下获取这些文件并将其可视化。

所以,我唯一的问题是如何过滤掉前 5 行。生成的所有 *.csv 中表头上方的行数相同,内容可能会发生变化。

可以在d3.csv("myCsv", type, function(){}); 内完成吗?还是需要先用js做?我正在使用 d3 v4。

【问题讨论】:

    标签: javascript csv d3.js rows


    【解决方案1】:

    使用type 函数(更广为人知的row 函数)的问题在于,它将为所有行调用。这不是你想要的。

    这里最好的办法可能是将 CSV 加载为纯文本。在 v5 中:

    d3.text("data.csv").then(function(data){
    

    在 v4 中:

    d3.text("data.csv", function(data){
    

    ... 然后我们删除第一行。在这里,我删除了前 3 行:

    const filtered = data.split('\n').slice(3);
    

    然后,我们重新创建 CSV 文件:

    const newCSV = filtered.join('\n');
    

    最后我们解析它:

    const newData = d3.csvParse(newCSV);
    

    顺便说一句,d3.csvParse 在 v4 和 v5 上都可以使用。

    当然,所有这些都可以在 1 行中完成:

    data = d3.csvParse(data.split('\n').slice(3).join('\n')) 
    

    这是一个显示它的 bl.ocks(使用 v5):https://bl.ocks.org/GerardoFurtado/5a43fdcedc214ecdb2eb20ac91af8623/6473eb3dfb05361a3dd7972756a490d9885542f5

    【讨论】:

    • 太棒了。谢谢你。我使用 d3.text() 的 v4 版本和 1-liner 代替了 d3.csv() 函数。现在我可以将 slice() 设置为“0”,它可以与普通 csv 一起使用,然后设置为“5”来处理我不寻常的 csv。谢谢。
    猜你喜欢
    • 2015-02-02
    • 2012-03-30
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    相关资源
    最近更新 更多