0

编程新手,如果我说错了,请原谅我。我目前正在做一个小项目,该项目使用 folium 将火山绘制到地图上。我使用的数据集可以在这里找到:https ://www.ngdc.noaa.gov/nndc/struts/form?t=102557&s=50&d=50我已将其保存为 CSV 文件以读入我的程序。

当我运行我的程序时,我收到以下错误:

...line 31, in <module>
folium.Marker(location=[lat, lon], popup=name, icon=folium.Icon(color=colour(elev), icon='cloud')).add_to(map)...
ValueError: Location values cannot contain NaNs, got:
[nan, nan]

我是否认为这是因为程序没有将 [lat, lon] 值作为第 31 行的数字读取?我最初在第 16 行也遇到了这个错误,但是我已经将 [lat, lon] 更改为 [latmean, lonmean] 这似乎已经纠正了问题,尽管这表明程序正在读取数字以应用平均值首先给他们。无论哪种方式,我都对导致问题的原因感到困惑。任何帮助将非常感激!

我的代码如下:

import pandas as pd
import folium

df = pd.read_csv('data.csv')

latmean = df['Latitude'].mean()
lonmean = df['Longitude'].mean()

map = folium.Map(location=[latmean, lonmean], zoom_start=7, tiles='Stamen 
Terrain')

def colour(elev):
    if elev in range (0, 1000):
        col = 'blue'
    elif elev in range (1001, 1999):
        col = 'green'
    elif elev in range (2000, 2999):
        col = 'orange'
    else:
        col = 'red'
    return col

for lat, lon, name, elev in zip(df['Latitude'], df['Longitude'], df['Name'], 
df['Elevation']):
    folium.Marker(location=[lat, lon], popup=name, icon=folium.Icon(color=colour(elev), icon='cloud')).add_to(map)

print(map.save('test.html'))
4

2 回答 2

0

你是对的。Lat 和 lon 返回非数字值或“非数字”(NaN)。Latmean 和 lonmean 是函数式的,因为 .mean() 正在执行类型强制来进行数学运算。

您可以通过在迭代之前对每个数据框对象调用 pd.to_numeric() 来执行类型转换:

df['Latitude'] = pd.to_numeric(df['Latitude'])

http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.to_numeric.html

于 2017-10-26T18:51:21.197 回答
0

似乎您数据中的一些纬度和经度坐标正在返回一个 numpy.nan 值。你可以通过实现 try-except 检查哪些值被传递给 Marker() 中的 location 参数来避免这种情况。

于 2017-10-30T12:43:35.887 回答