Folium NaN error - Python

Новое в программировании, так что прости меня, если я скажу что-нибудь ошибочное. В настоящее время я работаю над небольшим проектом, который наносит вулканы на карту, используя фолиум. Набор данных, который я использую, можно найти здесь: 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'))

2 ответа

Кажется, что некоторые из координат широты и долготы ваших данных возвращают значение numpy.nan. Вы можете избежать этого, реализовав try-кроме того, чтобы проверить, какие значения передаются в аргумент location в Marker().

Ты прав. Lat и lon возвращают нечисловые значения или "Не числа" (NaNs). Latmean и lonmean являются функциональными, потому что.mean() выполняет приведение типов к математике.

Вы можете выполнить преобразование типов, вызвав pd.to_numeric() для каждого из ваших объектов dataframe перед итерацией:

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

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

Другие вопросы по тегам