我有一个csv文件,其数据如下:
Time, Conditions, Temperature, Humidity, WindDir, WindDeg, U1, Pressure, U2, U3, U4, U4, UV, U5, MoonPercent, SunriseHr, SunriseMin, SunsetHr
"2014/06/19 19:00:00", "Clear", 16.8, "87%", "North", 355, 8.0, "1010", "11", 15, "NA", "1.2", " 0", "11", "47", "5", "03" "22", "07"
"2014/06/19 19:31:01", "Mostly Cloudy", 17.2, "86%", "NNE", 26, 12.9, "1010", "11", 15, "NA", "0.7", " 0", "11", "47", "5", "03" "22", "07"
"2014/06/19 19:40:00", "Mostly Cloudy", 17.4, "85%", "ENE", 68, 6.4, "1010", "11", 15, "NA", "0.7", " 0", "11", "47", "5", "03" "22", "07"
我想导入它,并且数组包含数字作为数字,而不是最初的字符串:
Object { Time="2014/06/19 19:00:00", Conditions=" "Clear"", Temperature=" 16.8", more...}
问题在于,无论我尝试什么,我都无法将数字变为实际数字,只有NaN。这是我的导入代码:
d3.csv("weatherLog.csv", function(error, csv) {
if (error) return console.warn(error);
csv.forEach(function(d){ (d['Temperature'] = +d['Temperature']); });
console.log(csv);
我尝试了d.Temperature,我尝试了parseInt(d。['温度']),但没有任何效果,当然d3不能使用字符串(或NaN) )作为数据,所以我需要以某种方式转换它。我尝试从CSV文件中手动删除空格(因此导入的字符串是" 16.8"而不是" 16.8")但这对...没有帮助... / p>
答案 0 :(得分:1)
您应该使用访问器函数将字符串转换为日期和数字。这样做的方法是使用.row()
方法,该方法迭代csv的行,并且对于每一行,允许您根据给定的数据提供将用于表示该行的输出对象。
提供给访问者的参数d
表示单行或基准。在访问者函数中,d
具有与您的数据列名称相对应的属性,例如Time
,Conditions
,Temperature
等...您可以操纵这些值在返回输出对象之前,所以在温度的情况下,您可以将输出对象的temperature
属性指定为+d.Temperature
,将其转换为数字。
按照惯例,属性名称是用JavaScript编写的,因此从访问者返回的对象应该使用驼峰键。
现在,当你的回调运行时,你的变量csv
包含一个对象数组,每个对象都有time
,conditions
,temperature
等属性。温度值已转换为数字。
以下是一个例子:
d3.csv('weatherLog.csv')
.row(function(d) {
// for each row of the data, create an object with these properties...
return {
time: d3.time.format('%Y/%m/%d %H:%M:%S').parse(d.Time),
conditions: d.Conditions,
temperature: +d.Temperature,
humidity: d.Humidity,
windDir: d.WindDir,
windDeg: +d.WindDeg,
pressure: +d.Pressure
};
})
.get(function(error, csv) {
if (!error) {
// lets say you want to log all the temperatures to the console
csv.forEach(function(d,i) {
var theTime = d3.time.format('%I:%M %p')(d.time);
console.log('The temperature at', theTime, 'was', d.temperature, 'degrees.');
});
} else {
// handle error
}
});
这会将以下内容输出到控制台:
The temperature at 7:00 PM was 16.8 degrees.
The temperature at 7:31 PM was 17.2 degrees.
The temperature at 7:40 PM was 17.4 degrees.
答案 1 :(得分:0)
这对我有用。
d3.csv("weatherLog.csv", function(d) {
return {
temperature: +d.Temperature;
}
}, function(error, csv) {
if (error) return console.warn(error);
console.log(csv);
});