【问题标题】:Convert JSON to Table with Pandas使用 Pandas 将 JSON 转换为表格
【发布时间】:2020-10-28 16:06:32
【问题描述】:

我开始研究python,结果是JSON格式时遇到一个问题。

我的 JSON 是这样的:

[{'eventid': '30', 'clock': '1602601344', 'name': 'Zabbix server has been restarted (uptime < 10m)', 'severity': '2', 'hosts': [{'hostid': '10084', 'name': 'Zabbix server'}], 'acknowledges': []}, {'eventid': '42', 'clock': '1603128324', 'name': 'Zabbix server has been restarted (uptime < 10m)', 'severity': '2', 'hosts': [{'hostid': '10084', 'name': 'Zabbix server'}], 'acknowledges': []}, {'eventid': '44', 'clock': '1603138524', 'name': 'Zabbix server has been restarted (uptime < 10m)', 'severity': '2', 'hosts': [{'hostid': '10084', 'name': 'Zabbix server'}], 'acknowledges': []}]

我尝试将结果转换为带有json_normalize 的表格,但我的结果是: Table after json_normalize

我看到带有示例的 json_normalize 文档,但我不明白如何将“名称”放在“主机”列上。

我的功能是:

def get_event_get(zbx_srv, token):
    try: 
        json_event_get = {
            "jsonrpc": "2.0",
            "method": "event.get",
            "params": {
                "selectHosts": ["name"],
                "output": ["eventid", "clock", "name", "severity"],
                "select_acknowledges": "extend",
                "sortfield": ["clock"],
                "filter": {
                    "value": ["1"],
                    "object": ["0"]
                },
            },
            "auth": token,
            "id": 1
        }
        event_get_request = requests.post(zbx_srv, json=json_event_get)
        event_get = event_get_request.json()['result']
        print(event_get)
        table_event = json_normalize(event_get)
        print(table_event)
        return event_get
    except Exception as e:
        print("Erro: %s" %(e))

谁能帮我理解一下?

【问题讨论】:

    标签: python json pandas zabbix


    【解决方案1】:

    试试这个,data 是您在上面发布的 json 字典。

    df = pd.json_normalize(data,
                           record_path=['hosts'],
                           meta=['eventid', 'clock', 'name', 'severity'],
                           meta_prefix='_')
    print(df)
    
    
    
    hostid           name _eventid      _clock                                            _name _severity
    0  10084  Zabbix server       30  1602601344  Zabbix server has been restarted (uptime < 10m)         2
    1  10084  Zabbix server       42  1603128324  Zabbix server has been restarted (uptime < 10m)         2
    2  10084  Zabbix server       44  1603138524  Zabbix server has been restarted (uptime < 10m)         2
    

    或者您可以使用record_prefix 代替:

    df = pd.json_normalize(data,
                           record_path=['hosts'],
                           meta=['eventid', 'clock', 'name', 'severity'],
                           record_prefix='hosts_')
    print(df)
    
    
    
    
    hosts_hostid     hosts_name eventid       clock                                             name severity
    0        10084  Zabbix server      30  1602601344  Zabbix server has been restarted (uptime < 10m)        2
    1        10084  Zabbix server      42  1603128324  Zabbix server has been restarted (uptime < 10m)        2
    2        10084  Zabbix server      44  1603138524  Zabbix server has been restarted (uptime < 10m)        2
    

    【讨论】:

      猜你喜欢
      • 2022-07-22
      • 2017-01-08
      • 2021-12-28
      • 2018-11-06
      • 2022-01-26
      • 1970-01-01
      • 2019-12-16
      • 2021-02-25
      相关资源
      最近更新 更多