python - 在循环期间添加具有特定值的列
问题描述
想象一下,我有以下字典:
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 |
解决方案
不要重复附加到数据框。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
推荐阅读
- c# - 在 datagridview 上的组合框列内添加项目并单击下拉菜单
- arrays - Postgres unnest 忽略数组结构的数组
- mysql - 升级 Knex 后出现“获取连接超时”
- javascript - 使用 if 语句和 .map() 时,渲染没有返回任何内容
- sql - 子查询中的值太多
- javascript - Reactjs img 标签没有在 src: 中呈现字符串?
- ruby-on-rails - 从嵌套哈希中删除所有相似的键
- javascript - 旧浏览器的 Polyfill 或 Ponyfill 正则表达式(lookahead、lookbehind、name group)
- android - Ionic 4 Android APK 在打开 AppBrowser '_self' 时崩溃
- image-processing - 从图像分割输出中近似/多边形化多边形