【发布时间】:2017-10-15 17:24:21
【问题描述】:
我在将由不同长度的列表组成的 JSON 转换为 pandas 数据框时遇到了一些问题。我从这样的网页获取 JSON:
import requests, json
import numpy as np
r = requests.get('https:a_web_page')
data = r.json()
type(data)
从这里我得到“数据”是一个列表的输出。
网页中的 JSON 文件如下所示:
[ [ 1411333200000 , 0.0 , [ 0.0 , 0.0 , 10.0 , 5.4014 , 0.42247 , 0.2517 ,
0.0 , 0.0 , 0.0 , 0.0 , 0.0616 , 0.0 , 0.0]] ,
[ 1411419600000 , 0.0 , [ 0.0
, 0.0 , 10.0 , 4.8029 , 2.17222 , 2.216 , 0.0 , 0.0 , 0.0 , 0.0 , 0.800 ,
0.0 , 0.0]] ,
[ 1411506000000 , 1.13383 , [ 9.448 , 0.0 , 10.0 , 6.07 , 2.1722 , 2.97500 ,
0.0 , 0.0 , 0.0 , 0.0 , 3.8017 , 1.17 , 2.893]]]
这是一个正确的 JSON 文件,可以在此网页中证明:https://konklone.io/json/
我要做的是将变量“数据”转换为这样的数据框:
1411333200000 0 0 0 10 5.4014 0.42247 0.2517 0 0 0 0
0.0616 0 0
1411419600000 0 0 0 10 4.8029 2.17222 2.216 0 0 0 0 0.8
0 0
1411506000000 1.13383 9.448 0 10 6.07 2.1722 2.975 0 0 0
0 3.8017 1.17 2.893
我的意思是,一个包含 15 列和 3 行的数据框。
使用将列表传递给 DataFrame 的常规方法:df = pd.DataFrame(data),我得到 3 列,第 3 列是 13 个元素的列表,所以它不起作用:
1411333200000 0 [0 0 10 5.4014 0.42247 0.2517 0 0 0 0
0.0616 0 0]
1411419600000 0 [0 0 10 4.8029 2.17222 2.216 0 0 0 0 0.8
0 0]
1411506000000 1.13383 [9.448 0 10 6.07 2.1722 2.975 0 0 0
0 3.8017 1.17 2.893]
我还尝试使用以下代码展平“数据”,但它也不起作用:
from collections import OrderedDict
def flatten(json_object, container=None, name=''):
if container is None:
container = OrderedDict()
if isinstance(json_object, dict):
for key in json_object:
flatten(json_object[key], container=container, name=name + key +
'_')
elif isinstance(json_object, list):
for n, item in enumerate(json_object, 1):
flatten(item, container=container, name=name + str(n) + '_')
else:
container[str(name[:-1])] = str(json_object)
return container
我也尝试了 unstack 和 json_normalize,但我无法让它工作。我不知道还能做什么,如果有人可以帮我一把或给我一个建议会很好..
【问题讨论】:
标签: python json pandas nested-lists