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

Python读取JSON文件报错'str'无decode属性,如何转GeoDataFrame

问题解决方法

报错原因

  • Python 3下使用r文本模式打开文件时,读取返回的内容已经是解码后的字符串类型,仅字节(bytes)类型对象拥有decode()方法,对字符串调用该方法就会触发AttributeError: 'str' object has no attribute 'decode'报错
  • 原有代码还存在其他逻辑问题:第一种写法中file_path被赋值为文件对象而非路径字符串,且逐行读取JSON内容无法被json.load正常解析;第二种写法错误传入文件对象作为open()的路径参数。

正确实现方案

要将GeoJSON转为GeoPandas DataFrame,有两种可行写法,推荐使用第二种原生方法更简洁:

方案1:手动读取JSON后转换

import os
import json
import geopandas as gpd

# 正确拼接文件路径,避免不同操作系统路径分隔符问题
file_path = os.path.join(os.getcwd(), "data/map/us_county/gz_2010_us_050_00_500k.json")

# 文本模式读取,无需手动解码
with open(file_path, 'r', encoding='utf-8') as f:
    geojson_content = json.load(f)

# 从GeoJSON的features字段生成GeoDataFrame
gpd_county = gpd.GeoDataFrame.from_features(geojson_content["features"])
# 可选:设置坐标系,该数据集默认是WGS84坐标系(EPSG:4326)
gpd_county.crs = "EPSG:4326"

方案2:GeoPandas原生直接读取(推荐)

GeoPandas内置了GeoJSON文件读取能力,无需手动处理文件IO和JSON解析:

import os
import geopandas as gpd

file_path = os.path.join(os.getcwd(), "data/map/us_county/gz_2010_us_050_00_500k.json")
gpd_county = gpd.read_file(file_path)

结果验证

执行完成后可运行以下代码查看前5行数据,确认转换成功:

print(gpd_county.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:51:02