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

基于Pandas DataFrame的name列高效填充GeoJSON字典的方法

高效将Pandas DataFrame转换为GeoJSON Feature集合

针对你的需求,我推荐用Pandas矢量化操作来生成GeoJSON,比逐个遍历name要高效得多,尤其是数据量较大的时候。下面是完整的实现步骤:

步骤1:准备数据并修正坐标类型

首先你的lon和lat列是字符串类型,GeoJSON标准要求坐标是数字,所以先转成float类型:

import pandas as pd

# 你的示例DataFrame
df = pd.DataFrame({
    'name':['jeff', 'susan','bill','emily'], 
    'lon':['25.0','43.9','18.8','22.4'],
    'lat':['19.3','11.2','45.3','28.0'], 
    'place':['Florida','Maine','Arizona','Colorado']
})

# 将lon和lat转为数值类型(符合GeoJSON标准要求)
df['lon'] = df['lon'].astype(float)
df['lat'] = df['lat'].astype(float)

步骤2:批量生成Feature字典

定义一个函数来生成单个Feature,然后用apply批量处理每一行数据:

def create_geojson_feature(row):
    return {
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [row['lon'], row['lat']]  # 注意GeoJSON坐标顺序是[经度, 纬度],别搞反!
        },
        "properties": {
            "name": row['name'],  # 把name放进properties,方便后续按名称查找
            "place_name": row['place']
        }
    }

# 批量生成所有Feature并转为列表
features = df.apply(create_geojson_feature, axis=1).tolist()

步骤3:构建完整的GeoJSON结构

标准的GeoJSON应该是FeatureCollection类型,这样既符合规范,也方便后续扩展:

geodict = {
    "type": "FeatureCollection",
    "features": features
}

步骤4:添加非DataFrame的额外数据

你可以直接用update方法给geodict添加顶层自定义数据,比如元信息:

# 添加额外的非DataFrame数据
geodict.update({
    "metadata": {
        "source": "Custom Dataset",
        "created_date": "2024-05-20"
    }
})

为什么这个方法高效?

  • 避免了Python级别的循环(比如for name in df['name']),而是用Pandas的apply,底层基于C实现,处理大数据量时速度快很多。
  • 批量处理逻辑清晰,后续维护和修改也更方便。

如果需要单独根据name获取对应的Feature,可以把features转成一个以name为键的字典:

feature_by_name = {f['properties']['name']: f for f in features}
# 示例:获取jeff对应的Feature
print(feature_by_name['jeff'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:15:19