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

Python Folium弹出窗口移除NaN问题求助:Pandas处理无效

解决Folium弹出窗口中Pandas数据NaN的显示问题

一、先搞定dropna()无效的问题

  • 先确认CSV里的空白是不是真的NaN:很多时候CSV里的空白是空字符串或者空格,不是Pandas识别的NaN,得先把这些转成标准NaN再处理:
    import pandas as pd
    df = pd.read_csv("work2.csv")
    # 把空字符串、纯空格的内容转成NaN
    df = df.replace(r'^\s*$', pd.NA, regex=True)
    
  • 再用dropna()时明确参数,确保生效:
    • 删除含NaN的行:df = df.dropna(axis=0, how='any')
    • 删除含NaN的列:df = df.dropna(axis=1, how='any')
    • 只删指定列有NaN的行:df = df.dropna(subset=['目标列1', '目标列2'])

二、解决Folium里的TypeError

TypeError大多是因为NaN(浮点型)和字符串拼接时类型不兼容,先把NaN替换成空字符串或者自定义文本,再生成弹窗内容:

import folium

# 把所有NaN替换成空字符串,避免类型错误
df_clean = df.fillna("")

# 创建地图
m = folium.Map(location=[你的纬度, 你的经度], zoom_start=12)

# 循环生成标记和弹窗
for idx, row in df_clean.iterrows():
    # 用HTML格式拼接弹窗内容,按需调整列名
    popup_content = f"""
    <strong>名称:</strong> {row['名称列']}<br>
    <strong>地址:</strong> {row['地址列']}<br>
    <strong>备注:</strong> {row['备注列']}
    """
    folium.Marker(
        location=[row['纬度列'], row['经度列']],
        popup=folium.Popup(popup_content, max_width=300)
    ).add_to(m)

# 保存地图
m.save("map.html")

三、解决弹窗只显示一个输入的问题

这大概率是循环里的内容拼接逻辑有问题,试试过滤掉每行的NaN字段,只保留有值的内容:

for idx, row in df.iterrows():
    # 过滤当前行的NaN,只保留有值的键值对
    valid_fields = row.dropna()
    # 把每个字段转成HTML行
    popup_lines = [f"<strong>{key}:</strong> {value}" for key, value in valid_fields.items()]
    # 拼接成弹窗内容
    popup_content = "<br>".join(popup_lines)
    
    folium.Marker(
        location=[row['纬度'], row['经度']],
        popup=folium.Popup(popup_content, max_width=300)
    ).add_to(m)

这样弹窗只会显示有实际内容的字段,自动跳过NaN列,不会出现空白或只显示一项的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:36:15