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