使用 Papaparse 从 CSV 文件中删除不需要的列
Remove unwanted columns from CSV file using Papaparse
我遇到了用户可以上传 csv 文件的情况。此 CSV 文件包含大量数据,但我只对 2 列(ID 和日期)感兴趣。目前,我正在使用 Papaparse
解析 CSV
Papa.parse(ev.data, {
delimiter: "",
newline: "",
quoteChar: '"',
header: true,
error: function(err, file, inputElem, reason) { },
complete: function (results) {
this.parsed_csv = results.data;
}
});
当这是运行时this.parsed_csv
表示由字段名称键入的数据对象。所以如果我 JSON.stringify
输出是这样的
[
{
"ID": 123456,
"Date": "2012-01-01",
"Irrelevant_Column_1": 123,
"Irrelevant_Column_2": 234,
"Irrelevant_Column_3": 345,
"Irrelevant_Column_4": 456
},
...
]
所以我的主要问题是如何删除不需要的列,只生成一个包含列 ID 和日期的新 csv?
谢谢
我意识到一件事,有没有办法添加动态变量。例如,我让用户 select 我想要映射的列。现在我需要做这样的事情
let ID = this.selectedIdCol;
this.parsed_csv = results.data.map(element => ({ID: element.ID, Date: element.Date}));
不过是说ID没用。谢谢
let data = [
{
"ID": 123456,
"Date": "2012-01-01",
"Irrelevant_Column_1": 123,
"Irrelevant_Column_2": 234,
"Irrelevant_Column_3": 345,
"Irrelevant_Column_4": 456
},
...
]
只需使用以下代码生成结果:
data = data.map(element => ({ID: element.ID, Date: element.Date}))
现在您有了所需的列,请在这些列上生成新的 CSV
请注意,如果您正在加载一个巨大的文件,您将在解析后立即将整个文件保存在内存中。此外,由于工作量大,它可能会冻结浏览器。您可以通过读取和丢弃列来避免这种情况:
- 逐行
- 一块一块地。
您应该在实施之前阅读 Papaparse's FAQ。总而言之,您将通过从 step
或 chunk
回调中提取所需的列来存储它们。
正如上面 Serrurier 指出的那样,您应该使用 step/chunk 函数来更改数据而不是在解析映射之后因为内存数据已经可用。
PapaParse.parse(file, { skipEmptyLines: true, header: true, step: (results, parser) => {
results.data = _.pick(results.data , [ 'column1' 'column2']);
return results;
}});
我遇到了用户可以上传 csv 文件的情况。此 CSV 文件包含大量数据,但我只对 2 列(ID 和日期)感兴趣。目前,我正在使用 Papaparse
解析 CSVPapa.parse(ev.data, {
delimiter: "",
newline: "",
quoteChar: '"',
header: true,
error: function(err, file, inputElem, reason) { },
complete: function (results) {
this.parsed_csv = results.data;
}
});
当这是运行时this.parsed_csv
表示由字段名称键入的数据对象。所以如果我 JSON.stringify
输出是这样的
[
{
"ID": 123456,
"Date": "2012-01-01",
"Irrelevant_Column_1": 123,
"Irrelevant_Column_2": 234,
"Irrelevant_Column_3": 345,
"Irrelevant_Column_4": 456
},
...
]
所以我的主要问题是如何删除不需要的列,只生成一个包含列 ID 和日期的新 csv?
谢谢
我意识到一件事,有没有办法添加动态变量。例如,我让用户 select 我想要映射的列。现在我需要做这样的事情
let ID = this.selectedIdCol;
this.parsed_csv = results.data.map(element => ({ID: element.ID, Date: element.Date}));
不过是说ID没用。谢谢
let data = [
{
"ID": 123456,
"Date": "2012-01-01",
"Irrelevant_Column_1": 123,
"Irrelevant_Column_2": 234,
"Irrelevant_Column_3": 345,
"Irrelevant_Column_4": 456
},
...
]
只需使用以下代码生成结果:
data = data.map(element => ({ID: element.ID, Date: element.Date}))
现在您有了所需的列,请在这些列上生成新的 CSV
请注意,如果您正在加载一个巨大的文件,您将在解析后立即将整个文件保存在内存中。此外,由于工作量大,它可能会冻结浏览器。您可以通过读取和丢弃列来避免这种情况:
- 逐行
- 一块一块地。
您应该在实施之前阅读 Papaparse's FAQ。总而言之,您将通过从 step
或 chunk
回调中提取所需的列来存储它们。
正如上面 Serrurier 指出的那样,您应该使用 step/chunk 函数来更改数据而不是在解析映射之后因为内存数据已经可用。
PapaParse.parse(file, { skipEmptyLines: true, header: true, step: (results, parser) => {
results.data = _.pick(results.data , [ 'column1' 'column2']);
return results;
}});