首页 > 解决方案 > 在 Pandas 框架中,作为列表的列条目分解其项目,以便它们单独垂直列出

问题描述

我已经为此工作了几个小时,试图弄清楚如何制作这个 json

{
    "method": "STATIC",
    "type": "IEEE_8023AD",
    "dns_search_domains": [
        "lab.local1",
        "lab.local2",
        "lab.local3"
    ],
    "dns_servers": [
        "11.12.200.1",
        "11.12.200.2",
        "11.12.200.3"
    ]
}

在熊猫中转换为这个输出

       method         type  dns_search_domains    dns_servers
0      STATIC  IEEE_8023AD          lab.local1    11.12.200.1
                                    lab.local2    11.12.200.2
                                    lab.local3    11.12.200.3

相反,我能想到的最好的就是这个。我一直在 dns_search_domains 和 dns_servers 列下获取此列表格式。

   method         type                 dns_search_domains                                 dns_servers
0  STATIC  IEEE_8023AD  [lab.local1, lab.local2, lab.local3]  [11.12.200.1, 11.12.200.2, 11.12.200.3]

看起来列表格式不允许我将项目单独分解,以便它们可以在其列下垂直输出。

这是基本代码。

import json
import pandas as pd
from pandas.io.json import json_normalize

with open ('network_conf_get.json') as f:
    d = json.load(f)

data = json_normalize(d)
pd.set_option('display.max_colwidth', 0)
pd.set_option('display.max_columns', None) 
pd.set_option('expand_frame_repr', False)
print(pd.DataFrame(data))

标签: pythonpandas

解决方案


您可以将数据框构造函数传递给set_index

pd.DataFrame(d).set_index(['method','type'])
Out[229]: 
                   dns_search_domains  dns_servers
method type                                       
STATIC IEEE_8023AD         lab.local1  11.12.200.1
       IEEE_8023AD         lab.local2  11.12.200.2
       IEEE_8023AD         lab.local3  11.12.200.3

推荐阅读