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

Streamlit中folium.PolyLine绘制公交线报字符串转浮点错误

Streamlit嵌入folium地图添加PolyLine触发类型转换错误解决方案

问题根因

报错ValueError: could not convert string to float的核心触发逻辑是CSV序列化/反序列化过程中坐标字段类型丢失:

  • 你在Colab中直接处理JSON源数据时,coordinates_reversed字段始终是嵌套数值列表格式,folium可以正常读取坐标值渲染折线
  • 当你把DataFrame导出为CSV再在本地读取时,pandas会将列表格式的坐标值自动识别为字符串类型,不会自动解析回原生列表。传给folium.PolyLine的locations参数实际是字符串内容,folium尝试把字符串内容转成浮点型坐标时就会抛出该错误。

你可以在本地循环渲染前加一行打印验证:

print(type(trajet_bus_fields.iloc[0]["coordinates_reversed"]))
# 本地环境输出为<class 'str'>,Colab环境输出为<class 'list'>

修复方法

1. 读取CSV后手动解析坐标字段

用ast.literal_eval把字符串格式的列表转回原生Python列表,同时增加坐标格式校验,避免脏数据触发报错:

import ast
import pandas as pd
import folium
from streamlit_folium import folium_static

# 读取本地CSV文件
trajet_bus_fields = pd.read_csv("你的本地公交线路CSV文件路径.csv")

# 将字符串格式的坐标解析为原生列表
trajet_bus_fields["coordinates_reversed"] = trajet_bus_fields["coordinates_reversed"].apply(
    lambda x: ast.literal_eval(x) if isinstance(x, str) else x
)

# 渲染地图
mapish = folium.Map(location=[48.083328, -1.68333])
for _, row in trajet_bus_fields.iterrows():
    popup = row['idligne']
    # 校验坐标点格式,强制转浮点型
    valid_coords = []
    for point in row["coordinates_reversed"]:
        if isinstance(point, (list, tuple)) and len(point) == 2:
            try:
                valid_coords.append([float(point[0]), float(point[1])])
            except (ValueError, TypeError):
                continue
    if valid_coords:
        folium.PolyLine(
            locations=valid_coords,
            weight=3,
            popup=popup,
            color="red"
        ).add_to(mapish)

folium_static(mapish)

2. 避免类型丢失的存储优化

如果需要跨环境传输带嵌套列表/复杂结构的DataFrame,不要使用CSV格式存储,改用parquet或者pickle格式,可以完整保留字段的原始数据类型,省去手动解析的步骤:

# Colab中存储时用parquet
trajet_bus_fields.to_parquet("bus_route.parquet")
# 本地读取时直接加载,字段类型和Colab中完全一致
trajet_bus_fields = pd.read_parquet("bus_route.parquet")

注意:你之前初始化coordinates_reversed字段用的np.empty((len(trajet_bus_fields), 0)).tolist()逻辑本身没有问题,问题出在CSV读写环节的类型自动转换,和Streamlit、folium库本身的兼容性无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:06:22