【问题标题】:How to make dataframe table from json file如何从json文件制作数据框表
【发布时间】:2020-01-07 08:19:34
【问题描述】:

我有 json 文件,我想将其转换为 pandas 数据框,从“标签”中获取一些变量,并从“字段”中获取一些变量

{
    "tags": {
        "ID": "99909",
        "type": "fff",
        "ID2": "565789"
    },
    "timestamp": 1500079519064,
    "tenant": "dxy",
    "tstable": "data",
    "user": "writer",
    "fields": {
        "a": "0.003",
        "b": "0.011",

    }
}

需要的输出:

df_out=pd.DataFrame({'ID':[99909],'type':["fff"],'ID2':[565789],"timestamp": [1500079519064],"tenant": ["dxy"],"tstable": ["data"],"user": ["writer"],"a": ["0.003"],"b": ["0.011"]})

print(df_out)
ID type     ID2      timestamp tenant tstable    user      a      b
0  99909  fff  565789  1577078519064    dxy    data  writer  0.003  0.011

【问题讨论】:

标签: json python-3.x pandas


【解决方案1】:

使用json.json_normalize:

j = {
    "tags": {
        "ID": "99909",
        "type": "fff",
        "ID2": "565789"
    },
    "timestamp": 1500079519064,
    "tenant": "dxy",
    "tstable": "data",
    "user": "writer",
    "fields": {
        "a": "0.003",
        "b": "0.011",

    }
}

from pandas.io.json import json_normalize

df = json_normalize(j)
print (df)
       timestamp tenant tstable    user tags.ID tags.type tags.ID2 fields.a  \
0  1500079519064    dxy    data  writer   99909       fff   565789    0.003   

  fields.b  
0    0.011  

如有必要,最后更改列名添加rename

f = lambda x: x.split('.')[-1]
df = json_normalize(j).rename(columns=f)
print (df)
       timestamp tenant tstable    user     ID type     ID2      a      b
0  1500079519064    dxy    data  writer  99909  fff  565789  0.003  0.011

【讨论】:

    【解决方案2】:

    如果您有嵌套列,那么您首先需要对数据进行规范化:

    import pandas as pd
    from pandas.io.json import json_normalize
    data = [
      {
        "tags": {
            "ID": "99909",
            "type": "fff",
            "ID2": "565789"
        },
        "timestamp": 1500079519064,
        "tenant": "dxy",
        "tstable": "data",
        "user": "writer",
        "fields": {
            "a": "0.003",
            "b": "0.011",
    
        }
    }]
    
    df = pd.DataFrame.from_dict(json_normalize(data), orient='columns')
    
    print(df)
    

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2017-09-27
      • 2022-01-01
      相关资源
      最近更新 更多