You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用D3从2万行CSV中提取feature_id列的唯一值列表?

提取D3加载CSV中feature_id的唯一值并过滤数据

嘿,这个需求太常见了,处理带重复类别的CSV数据时,提取唯一值是过滤的第一步,我给你几个实用的方案,不管你用的是新版还是旧版D3都能搞定,2万行数据完全不在话下~

方法1:用D3 v7+的d3.group(最直观)

d3.group是D3新版里的分组工具,能快速按指定字段分组,自动帮你去重:

d3.csv("你的数据文件.csv").then(data => {
  // 提取所有唯一的feature_id,转成数组
  const uniqueFeatureIds = Array.from(d3.group(data, d => d.feature_id).keys());
  console.log("唯一类别列表:", uniqueFeatureIds);

  // 接下来就可以用这个列表过滤数据了,比如保留指定类别
  const allowedCategories = ["类别X", "类别Y", "类别Z"]; // 你需要保留的类别
  const filteredData = data.filter(item => allowedCategories.includes(item.feature_id));
  
  // 或者过滤掉不需要的类别
  const excludedCategories = ["无效类别A", "无效类别B"];
  const filteredData = data.filter(item => !excludedCategories.includes(item.feature_id));
});

d3.group返回的是一个Map对象,keys()方法会直接给出所有唯一的feature_id,转成数组就方便后续使用了。

方法2:用d3.map(兼容旧版D3)

如果你用的是D3 v6及更早的版本,d3.map是更稳妥的选择,它会自动处理重复键:

d3.csv("你的数据文件.csv").then(data => {
  // 创建以feature_id为键的映射,自动去重
  const featureIdMap = d3.map(data, d => d.feature_id);
  const uniqueFeatureIds = featureIdMap.keys(); // 直接返回唯一值数组
  
  console.log("唯一类别列表:", uniqueFeatureIds);
  
  // 过滤逻辑和上面一样
  const filteredData = data.filter(item => allowedCategories.includes(item.feature_id));
});

方法3:结合ES6的Set(简洁高效)

如果你不想依赖D3的工具,纯JavaScript的Set就能搞定去重,代码更简洁:

d3.csv("你的数据文件.csv").then(data => {
  // 用Set自动去重,再转成数组
  const uniqueFeatureIds = [...new Set(data.map(item => item.feature_id))];
  console.log("唯一类别列表:", uniqueFeatureIds);
  
  // 过滤操作同上
});

小提示:处理脏数据

如果你的CSV里feature_id存在空格、大小写不一致的情况,可以在提取时先做统一处理:

// 比如去掉首尾空格并转成小写,避免因格式问题导致的重复
const uniqueFeatureIds = [...new Set(data.map(item => item.feature_id.trim().toLowerCase()))];

内容的提问来源于stack exchange,提问作者Dominic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:15:56