d3正则表达式或Notepad ++数据清理

时间:2017-02-19 21:23:23

标签: regex csv notepad++

使用各种数据技术来弄清楚哪一个最适合与工作相关的任务,我发现我需要做一些小的数据清理。

我在csv中有一个“BookingID”列,它只有两种不同的可能的输入格式:

"19028848
"

"27515492
AirBnB-16002513-4222RF"

请注意,我不确定为什么引号或新换行符就是这样。可能与原始文件是Excel并使用Excel保存为CSV这一事实有关。

在任何情况下,我都有以下d3代码,用于映射和过滤我想要的两列我想要的d3数组,以便在比例映射中使用:

    sales = data
    .map(d => [+d["BookingID"], +d["Total Paid"]])
    .filter(results => results.every(not(isNaN)));

这适用于我在这里写的第一种格式的所有BookingID,但不适用于第二种格式(即它们被过滤掉)。我想要一个解决方案来删除所有从数字后面开始的东西,所以在上面的例子的情况下,我最终得到了27515492.我对这一切都不是非常有经验,但我无法想象人们在d3中做了很多清理工作,对吗?由于我不确定我是否会使用d3,highcharts,Tableau或其他内容,因此我想在excel电子表格或Notepad ++级别的CSV中使用解决方案。我刚从另一个问题看到了CSVed,但我只需要最好的解决方案,不一定是GUI或任何花哨的东西。我感谢你的推荐(以及正则表达式,你的正则表达式)谢谢你。

1 个答案:

答案 0 :(得分:1)

使用正则表达式时,无需在Notepad ++中预处理数据,因为所有这些都可以在JavaScript中轻松完成:



// data contains the result of your CSV input processed by d3.csv()
var data = [{
  "BookingID": "19028848\n",
  "Total Paid": "1"
}, {
  "BookingID": "27515492\nAirBnB-16002513-4222RF",
  "Total Paid": "1"
}];

var sales = data
  .map(d => [
    +/^(\d+).*/.exec(d["BookingID"])[1],   // extract ID from input strings
    +d["Total Paid"]
  ]);

console.log(sales);




正则表达式/^(\d+).*/将从两种格式中提取预订ID的相关部分,并将结果直接输入您的数据处理。