Python 无法将JSON转换为熊猫。所有数据都包含在一行中。我如何打开它?
然而,我试图将JSON文件转换为pandas数据帧,虽然列看起来正确,但所有数据都包含在一行中,而不是我希望它是一个以“财政年度”为索引的时间序列Python 无法将JSON转换为熊猫。所有数据都包含在一行中。我如何打开它?,python,json,pandas,nested,flatten,Python,Json,Pandas,Nested,Flatten,然而,我试图将JSON文件转换为pandas数据帧,虽然列看起来正确,但所有数据都包含在一行中,而不是我希望它是一个以“财政年度”为索引的时间序列 将熊猫作为pd导入 将numpy作为np导入 导入urllib.request,json 从pandas.io.json导入json_规范化 response=urllib.request.urlopen('https://api.gurufocus.com/public/user/f97abc68a0f96617ccea854faeff6db:ca
将熊猫作为pd导入
将numpy作为np导入
导入urllib.request,json
从pandas.io.json导入json_规范化
response=urllib.request.urlopen('https://api.gurufocus.com/public/user/f97abc68a0f96617ccea854faeff6db:ca86e5ff8d37550212f9c7d45645d413/stock/WMT/financials')
content=response.read()
data=json.load(content.decode('utf8'))
数据=(数据['financials']['annuals'])
数据=json_规范化(数据)
df=pd.DataFrame(数据)
df=pd.io.json.json\u规范化(数据)
打印(df)
输出似乎是一个df,列看起来是正确的,但只有一行,每个列应该至少有30个唯一年份。如有任何建议,将不胜感激 这远远超出了pandas自动Json处理的功能:您的Json是一个复杂的结构,最多有两个关键级别,只有大小为30或31的列表 在这一点上,忘记json_规范化,开始手动解析 首先,将字典展平:
def flatten(data):
flat = {}
for k, v in data.items():
if isinstance(v, dict):
for j, u in flatten(v).items():
flat[k+'-'+j] = u
else:
flat[k] = v
return flat
data2 = flatten(data)
控制我们现在有一个列表的目录,并控制列表的大小:
c = collections.Counter()
for k,v in data2.items():
if isinstance(v, list):
c[len(v)] += 1
else:
print('============', k, type(v))
好的,只有31个元素的列表,只有一个除外:添加一个None
使所有列表长度相等:
for k,v in data2.items():
if len(v) == 30:
v.append(None)
我们现在有了一个等长列表字典:这适合于构建数据框架:
df = pd.DataFrame(data2)
您能提供一个数据样本以便于复制吗?谢谢您查看Serge。我在“flat=”行之后立即插入您的代码,并收到以下错误消息。。。名称错误:未定义名称“集合”
collections
是标准库中的包。只需在使用前添加导入集合
。效果很好。谢谢!