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
相关产品推荐
相关产品推荐

