You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gmplot绘制热力图时遇TypeError:需实数而非字符串

解决gmplot热力图报错TypeError: must be real number, not str的问题

我之前也碰到过类似的情况——明明pandas显示列的dtype是float64,gmplot却还是抛出了类型错误。大概率是数据里的隐藏问题或者传递方式的小细节导致的,你可以按下面的步骤逐一排查:

1. 检查并清理NaN值

gmplot的heatmap函数没法处理缺失值(NaN),哪怕列的整体dtype是float64,只要存在NaN,就可能触发类型错误。先检查缺失值数量:

print(lat_lon[['latitude', 'longitude']].isna().sum())

如果有缺失值,先清理掉再绘图:

lat_lon_clean = lat_lon.dropna(subset=['latitude', 'longitude'])
gmap.heatmap(lat_lon_clean['latitude'], lat_lon_clean['longitude'])

2. 将pandas Series转换为原生列表/NumPy数组

有时候gmplot对pandas Series的兼容性不太友好,哪怕dtype正确,也可能出现识别异常。你可以把Series转换成列表或者NumPy数组再传递:

# 转换成列表
gmap.heatmap(lat_lon['latitude'].tolist(), lat_lon['longitude'].tolist())

# 或者转换成NumPy数组
gmap.heatmap(lat_lon['latitude'].values, lat_lon['longitude'].values)

3. 验证数据中是否存在隐藏的非数值内容

虽然dtype显示是float64,但极少数情况下,数据读取过程中可能混入了不可见的字符串字符(比如空格、特殊符号),导致pandas表面显示为float,但实际内部有异常。你可以尝试强制转换并检查:

# 强制转换为float,若有异常会直接抛出错误
lat_lon['latitude'] = lat_lon['latitude'].astype(float)
lat_lon['longitude'] = lat_lon['longitude'].astype(float)

如果这一步报错,说明确实有隐藏的非数值内容,需要进一步清洗数据(比如用str.strip()去掉空格,或者替换异常值)。

4. 测试最小可复现案例

如果上面的步骤都没用,你可以用一组确定的数值测试,确认是数据问题还是gmplot版本问题:

import gmplot
import pandas as pd

# 手动构造洛杉矶附近的坐标
test_data = pd.DataFrame({
    'latitude': [34.0522, 34.0689, 34.0207],
    'longitude': [-118.2437, -118.3002, -118.2899]
})

gmap = gmplot.GoogleMapPlotter.from_geocode("Los Angeles", 10)
gmap.heatmap(test_data['latitude'], test_data['longitude'])
gmap.draw('test_crime_map.html')

如果这个测试代码能正常运行,那说明你的原始数据肯定存在异常,需要进一步排查;如果测试代码也报错,那可能是gmplot版本的问题,尝试升级到最新版本:

pip install --upgrade gmplot

内容的提问来源于stack exchange,提问作者Miguel 2488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:19:27