编程新手,如果我说错了,请原谅我。我目前正在开展一个小型项目,利用叶片将火山绘制到地图上。我可以在此处找到使用的数据集: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]
我是否正确地认为这是因为程序没有将第31行的数字作为[lat,lon]值读取?我最初也在第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'))
答案 0 :(得分:0)
你是对的。 Lat和lon返回非数字值或&#34;不是数字&#34; (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
答案 1 :(得分:0)
您的数据中的某些纬度和经度坐标似乎返回了numpy.nan值。您可以通过实现try-except来检查Marker()中传递给location参数的值。