Python报错string indices must be integers:JSON转DataFrame遇阻求助
解决JSON转DataFrame时"string indices must be integers"报错问题
问题描述
从PDF提取生成的JSON文件中提取字段创建CSV,能获取对应数值,但无法存入DataFrame,出现**"string indices must be integers"**报错,无法将JSON文本值追加到DataFrame内。
JSON结构说明:顶层是数组,每个元素包含documentResults数组;documentResults的元素中,fields字段下有VendorName、AccountNo、Address等子字段,每个子字段包含text属性存储目标值。
原代码
import json import csv import pandas as pd with open("C:\\Test.Json", 'r') as file: jsonData = json.load(file) outputfile = "C:\\Test.csv" df2 = pd.DataFrame(columns=['VendorName','AccountNo','Address']) for i in jsonData: print("VendorName:", jsonData[i]['documentResults'][0]['fields']['VendorName']['text']) v1 = jsonData[i]['documentResults'][0]['fields']['VendorName']['text'] df = pd.DataFrame([v1]) df2 = pd.concat([df2, df], axis=0, ignore_index=True) print("V1: ", v1) df2.to_csv(outputfile)
报错详情
报错位置:
print("VendorName:", jsonData[i]['documentResults'][0]['fields']['VendorName']['text'])
报错信息:String indices must be integers
解决方案
错误原因
jsonData是**列表(数组)**而非字典,for i in jsonData遍历的是列表里的每个文档对象,不是索引或键。原代码用jsonData[i]试图以对象为索引访问列表,自然触发报错。此外,多次concat单个值的DataFrame会导致列名混乱,不符合预期。
修正后的代码
import json import pandas as pd with open("C:\\Test.Json", 'r') as file: jsonData = json.load(file) outputfile = "C:\\Test.csv" # 用列表收集所有数据,避免频繁拼接DataFrame data_list = [] for doc in jsonData: # 按正确路径提取字段值 vendor_name = doc['documentResults'][0]['fields']['VendorName']['text'] account_no = doc['documentResults'][0]['fields']['AccountNo']['text'] address = doc['documentResults'][0]['fields']['Address']['text'] # 用字典对应DataFrame的列名,保证结构匹配 data_list.append({ 'VendorName': vendor_name, 'AccountNo': account_no, 'Address': address }) # 直接从列表生成DataFrame,高效且结构准确 df = pd.DataFrame(data_list) # 写入CSV时去掉默认索引 df.to_csv(outputfile, index=False)
内容的提问来源于stack exchange,提问作者narsareddyy
相关产品推荐
相关产品推荐

