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

Python中如何将JSON字符串转为DataFrame并解决string indices must be integers报错

报错修复方案

你遇到的string indices must be integers报错根因是直接对JSON字符串执行了key索引操作,没有先将JSON字符串解析为Python字典/列表对象。修复方法如下:

import json
import pandas as pd

# 假设你拿到的原始响应是JSON字符串,命名为raw_json_str
# 第一步:先解析JSON字符串为Python字典
json_data = json.loads(raw_json_str)
# 现在就可以正常用key索引取值,不会报错了
JSON转DataFrame实现方法

你给出的JSON包含多组结构化列表,可根据你的需求转换对应部分:

1. 转换单组列表为DataFrame

以转换word_list、phrase_list、entity_list为例:

# 转换词列表
df_word = pd.DataFrame(json_data["word_list"])
# 转换短语列表
df_phrase = pd.DataFrame(json_data["phrase_list"])
# 转换实体列表,嵌套结构用json_normalize自动展开type、meaning等子字段
df_entity = pd.json_normalize(json_data["entity_list"])

如果需要将hit数组拆分为单独列,可以额外处理:

df_word[["hit_start", "hit_length", "hit_idx1", "hit_idx2"]] = df_word["hit"].apply(pd.Series)
# 处理完可以删掉原来的hit列
df_word = df_word.drop("hit", axis=1)

2. 合并顶层元数据到列表DataFrame

如果需要把JSON顶层的norm_str(标准化文本)、lang(语言)、engine_version(引擎版本)等公共字段合并到每行数据中:

# 提取公共字段
common_info = {
    "norm_str": json_data["norm_str"],
    "lang": json_data["lang"],
    "engine_version": json_data["engine_version"]
}
# 把公共字段添加到df_word中
for k, v in common_info.items():
    df_word[k] = v

3. 和原始数据集合并

如果你的原始数据集(假设命名为df_original)存在和norm_str对应的文本字段,直接用主键合并即可:

# 假设原始数据集的文本字段名为raw_text,和norm_str一一对应
df_merged = pd.merge(df_original, df_word, left_on="raw_text", right_on="norm_str", how="left")

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

相关产品推荐
方舟 Agent Plan

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

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