Folium NaN错误 - Python

时间:2017-10-23 14:25:38

标签: python nan 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]

我是否正确地认为这是因为程序没有将第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'))

2 个答案:

答案 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参数的值。