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

使用BeautifulSoup解析KML文件生成Pandas DataFrame失败的问题及文件读取方法咨询

解决KML解析与生成Pandas DataFrame的问题

看起来你的代码已经迈出了第一步,但还需要调整下逻辑来精准提取你要的数据。我帮你修改并解释下怎么实现目标:

修正后的解析代码

首先,我们需要精准定位到name为MyNodes的Folder,然后遍历其下的Placemark节点提取所需字段:

from bs4 import BeautifulSoup
import pandas as pd

fn = r'sampleKMLFile.kml'
# 用with语句读取文件,自动处理文件关闭,更安全
with open(fn, 'r') as f:
    soup = BeautifulSoup(f, 'xml')

# 找到目标Folder(用find而非find_all,因为我们只需要第一个匹配的文件夹)
target_folder = soup.find("Folder", {"name": "MyNodes"})
# 获取该文件夹下所有的Placemark节点
placemarks = target_folder.find_all("Placemark")

# 准备存储数据的列表
data_records = []
for pm in placemarks:
    # 提取节点名称
    node_name = pm.find("name").text.strip()
    # 获取Camera标签下的经纬度
    camera_tag = pm.find("Camera")
    lon = camera_tag.find("longitude").text.strip()
    lat = camera_tag.find("latitude").text.strip()
    
    # 也可以选择从Point的coordinates字段提取(如果Camera标签不存在时可用)
    # coords = pm.find("Point").find("coordinates").text.strip().split(',')
    # lon, lat = coords[0], coords[1]
    
    # 将数据存入字典,方便后续转成DataFrame
    data_records.append({
        "MyNodes": node_name,
        "longitude": float(lon),
        "latitude": float(lat)
    })

# 生成目标DataFrame
result_df = pd.DataFrame(data_records)
print(result_df)

运行这段代码后,你就能得到和示例一致的DataFrame:

MyNodeslongitudelatitude
Houston-95.033.0
Austin-97.033.0

关键调整说明

  • 文件读取:用with open替代直接open,能自动处理文件关闭,避免资源泄漏。
  • 定位目标Folder:用find代替find_all,因为我们只需要匹配第一个名为MyNodes的文件夹,find_all会返回列表,需要额外索引才能操作。
  • 字段提取:遍历每个Placemark,分别提取name、Camera下的经纬度,转成float类型方便后续数据分析。

关于补充疑问:读取文件生成样本/计数数据

上面的代码已经包含了完整的文件读取逻辑,在此基础上可以轻松生成样本或计数数据:

生成样本数据

直接提取你需要的字段即可,比如如果只需要前2条样本:

sample_df = result_df.head(2)
print(sample_df)

生成计数数据

统计MyNodes下的节点数量,或者特定条件的节点数:

# 统计MyNodes下的总节点数
total_nodes = len(placemarks)
print(f"MyNodes文件夹下共有{total_nodes}个节点")

# 统计纬度等于33的节点数量
lat_33_count = len(result_df[result_df['latitude'] == 33])
print(f"纬度为33的节点共有{lat_33_count}个")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:37:46