首页 > 解决方案 > 在循环期间添加具有特定值的列

问题描述

想象一下,我有以下字典:

 configs = {
    'CONFIG1': [
        {
            "server": "SERVER_1",
            "description": "Testing server 1.",
        },
        {
            "server": "SERVER_2",
            "description": "Testing server 2.",
        }
    ],
    'CONFIG2': [
        {
            "server": "SERVER_3",
            "description": "Testing server 3.",
        },
        {
            "server": "SERVER_4",
            "description": "Testing server 4.",
        }
    ],
    'CONFIG3': [
        
    ]
}

我想将此配置组织到一个数据框中,使其如下所示:

服务器 描述 配置名称
SERVER_1 测试服务器 1。 配置1
SERVER_2 测试服务器2。 配置1
SERVER_3 测试服务器 3. 配置2
SERVER_4 测试服务器 4. 配置2

我还想防止将空配置键(例如 CONFIG3)添加到数据框中。

我试过这样做:

import pandas as pd

df = pd.DataFrame()

for config in configs:
    if configs[config]:
        df = df.append(configs[config], ignore_index=True)
        df['config_name'] = config
    

print(df)

但是配置名称不对。输出是:

服务器 描述 配置名称
SERVER_1 测试服务器 1。 配置2
SERVER_2 测试服务器2。 配置2
SERVER_3 测试服务器 3. 配置2
SERVER_4 测试服务器 4. 配置2

标签: pythonpandas

解决方案


不要重复附加到数据框。concat几乎总是一个更好的选择:

pd.concat([pd.DataFrame(d).assign(config_name=k) 
           for k,d in configs.items()
          ])

输出:

     server        description config_name
0  SERVER_1  Testing server 1.     CONFIG1
1  SERVER_2  Testing server 2.     CONFIG1
0  SERVER_3  Testing server 3.     CONFIG2
1  SERVER_4  Testing server 4.     CONFIG2

推荐阅读