如何将嵌套JSON股票数据转CSV?解决Pandas两类报错问题
解决嵌套JSON转CSV的报错问题
我来帮你搞定这个嵌套JSON转CSV的问题,先分析下你遇到的两个报错原因,再给出两种简洁的解决方案:
报错原因解析
ValueError: If using all scalar values, you must pass an index
你直接用pd.read_json('data.json')读取后,得到的是一个只有1列(Global Quote)的DataFrame,而这一列的单元格值是完整的嵌套字典(属于标量值)。当你调用to_csv时,Pandas无法直接将这种嵌套结构拆分成CSV的列,所以抛出这个错误。TypeError: string indices must be integers
这个错误应该是你手动处理时的操作失误——比如你可能没有用json.load()正确解析JSON文件,直接把文件读取的字符串当成字典去索引(比如f.read()['Global Quote']),字符串只能用整数索引位置,自然会报错。
最优解决方案
方法一:先解析提取嵌套字典,再转DataFrame
这是最直观的方式,延续你已经做的提取步骤,只要正确转换为DataFrame即可:
import json import pandas as pd # 读取并解析JSON文件 with open('data.json', 'r') as f: meta = json.load(f) # 提取嵌套的核心数据字典 data_dict = meta['Global Quote'] # 将单个字典转为DataFrame(注意要把字典放进列表中,确保Pandas识别为一行数据) df = pd.DataFrame([data_dict]) # 保存为CSV,设置index=False避免生成额外的索引列 df.to_csv('datatest.csv', encoding='utf-8-sig', index=False)
方法二:用Pandas的json_normalize直接处理嵌套JSON
json_normalize是Pandas专门为嵌套JSON设计的工具,适合各种复杂嵌套结构,这里用它更简洁:
import pandas as pd # 先读取JSON为Series(typ='series'会把顶层JSON转为Series,值就是嵌套字典) json_series = pd.read_json('data.json', typ='series') # 用json_normalize展开嵌套字典为平级DataFrame df = pd.json_normalize(json_series) # 保存CSV df.to_csv('datatest.csv', encoding='utf-8-sig', index=False)
两种方法最终都会生成符合预期的CSV,列就是01. symbol、02. open这些字段,行就是对应的股票数据。
内容的提问来源于stack exchange,提问作者CLi
相关产品推荐
相关产品推荐

