【问题标题】:Nested lists of different lenghts from a Json to Pandas Dataframe从 Json 到 Pandas 数据框的不同长度的嵌套列表
【发布时间】: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


    【解决方案1】:
    df=pd.DataFrame(data)
    
    df=pd.concat([df.iloc[:,0:2],df[2].apply(pd.Series)],axis=1)
    df.columns=list(range(df.shape[1]))
    df
    Out[63]: 
                  0        1      2    3     4       5        6       7    8   \
    0  1411333200000  0.00000  0.000  0.0  10.0  5.4014  0.42247  0.2517  0.0   
    1  1411419600000  0.00000  0.000  0.0  10.0  4.8029  2.17222  2.2160  0.0   
    2  1411506000000  1.13383  9.448  0.0  10.0  6.0700  2.17220  2.9750  0.0   
        9    10   11      12    13     14  
    0  0.0  0.0  0.0  0.0616  0.00  0.000  
    1  0.0  0.0  0.0  0.8000  0.00  0.000  
    2  0.0  0.0  0.0  3.8017  1.17  2.893  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 2018-03-07
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      相关资源
      最近更新 更多