首页 > 解决方案 > d3/js 数据操作删除列

问题描述

我在 csv 中有一个数据集,如下所示。

country,col1,col2,col3
Germany,19979188,11233906,43.7719591
UK,3839766,1884423,50.92349378
France,1363608,796271,41.60557873
Italy,957516,557967,41.72765781

我想在保留国家和 col3 的同时删除 col1、col2。如果可能的话,我想将它包装到一个函数中,我可以在其中传递我想删除/保留的列列表。

使用我熟悉的 pandas,我可以轻松做到。例如 data.drop(['col1', 'col2'], axis = 1)。但我发现 d3 方式或 js 方式通常是基于每一行的,所以无法想出删除列的想法。

我正在考虑 d3.map() 只取所需的列。但是我坚持构建一个可以传入列列表的通用函数。

任何人都可以有想法吗?

标签: javascriptd3.js

解决方案


D3 fetch 方法,如d3.csv,将检索整个CSV 并将基于该 CSV 创建一个对象数组。因此,过滤掉一些列是没有用的。实际上,这比无用更糟糕:您将花费时间和资源进行不必要的操作。

因此,唯一有用的解决方案是,如果您有权访问并拥有该 CSV,则创建一个没有这些列的新 CSV。这样,您将拥有一个更小的文件,加载速度更快。否则,如果您无法更改 CSV 本身,请不要打扰:只需加载整个内容并使用您想要的列(这将是对象中的属性),而忽略其他列。

最后,如果你有很多数据操作,减少数据数组中对象的大小可能会很有趣。如果是这种情况,请使用行函数仅返回您想要的属性。例如:

d3.csv(url, function (d){
    return {country: d.country, col3: d.col3}
}).then(etc...)

推荐阅读