如何筛选CSV导入数据,仅保留Year与Matches指定列
问题描述
我有如下格式的CSV数据:
Year Teams Matches Goals 2014 32 64 171 2010 32 64 125 2006 32 64 147 2002 32 64 161 1998 32 64 171 1994 24 52 141
我使用以下代码导入数据:
let promises = [ d3.csv('data/test-data.csv', d3.autoType), ]; Promise.all(promises) .then(function (data) { createVis(data) }) .catch(function (err) { console.log(err) });
随后我有一个用于处理数据并生成图表的createVis()函数:
function createVis(data) { let graphData = data[0] wrangleData() }
需求是在wrangleData()函数中仅提取原始数据集的Year和Matches列,最终得到如下格式的filteredData:
Year Matches 2014 64 2010 64 2006 64 2002 64 1998 64 1994 52
请问该如何实现这一需求?
解决方案
你可以通过数组的map()方法筛选字段,具体实现步骤如下:
1. 修改createVis()传递数据
首先要把原始数据传入wrangleData(),同时接收处理后的结果:
function createVis(data) { let graphData = data[0] // 传入原始数据并获取处理后的筛选数据 const filteredData = wrangleData(graphData) // 这里可以继续使用filteredData进行图表渲染操作 }
2. 实现wrangleData()函数
遍历原始数据,为每条数据只保留Year和Matches两个字段:
function wrangleData(rawData) { // 用map遍历每条数据,返回仅包含目标字段的新对象数组 return rawData.map(item => ({ Year: item.Year, Matches: item.Matches })) }
说明
map()方法会生成一个全新的数组,不会修改原始数据- 每个新对象仅保留你需要的两个字段,结构完全符合预期
- 因为导入时使用了
d3.autoType,Year和Matches已经被自动解析为数值类型,无需额外转换
内容的提问来源于stack exchange,提问作者equanimity
相关产品推荐
相关产品推荐

