使用各种数据技术来弄清楚哪一个最适合与工作相关的任务,我发现我需要做一些小的数据清理。
我在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或任何花哨的东西。我感谢你的推荐(以及正则表达式,你的正则表达式)谢谢你。
答案 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的相关部分,并将结果直接输入您的数据处理。