如何将指定字典数据转换为Pandas DataFrame并导出至Excel?
解决方案:将字典转换为Pandas DataFrame并导出至Excel
完全可以实现你的需求,以下是具体步骤和代码:
1. 导入依赖库
首先导入pandas,如果需要设置Excel单元格合并格式,额外导入openpyxl相关模块:
import pandas as pd # 如需合并单元格格式,导入以下库 from openpyxl.styles import Alignment from openpyxl import load_workbook
2. 定义目标字典
使用你提供的字典数据:
dic = { '10.109.0.0/16': ['10.109.0.0/19', '10.109.32.0/19', '10.109.64.0/19', '10.109.96.0/19', '10.109.128.0/19', '10.109.160.0/19', '10.109.192.0/19', '10.109.224.0/19'], '10.111.0.0/16': [ '10.111.0.0/24', '10.111.0.0/19', '10.111.1.0/24', '10.111.32.0/19', '10.111.48.0/24', '10.111.64.0/20', '10.111.189.0/24', '10.111.190.0/24', '10.111.192.0/19', '10.111.224.0/19' ] }
3. 生成DataFrame
方式一:数据规范型(每个子网对应完整Aggregate值)
这种结构便于后续数据分析,每个子网行都保留对应的聚合网段:
# 构造数据列表 data = [] for aggregate, subnets in dic.items(): for subnet in subnets: data.append({'Aggregate': aggregate, 'Subnet': subnet}) # 创建DataFrame df = pd.DataFrame(data)
方式二:匹配示例显示型(仅首行显示Aggregate)
如果需要和你提供的示例格式一致,仅每个聚合网段组的第一行显示Aggregate值,其余行留空:
# 构造数据列表 data = [] for aggregate, subnets in dic.items(): for idx, subnet in enumerate(subnets): if idx == 0: data.append({'Aggregate': aggregate, 'Subnet': subnet}) else: data.append({'Aggregate': '', 'Subnet': subnet}) # 创建DataFrame df = pd.DataFrame(data)
4. 导出至Excel文件
基础导出(无格式)
直接将DataFrame导出为Excel文件:
df.to_excel('subnet_list.xlsx', index=False)
带合并单元格的格式导出(匹配示例样式)
如果使用方式二生成的DataFrame,可以进一步设置Excel单元格合并,让显示效果和示例一致:
# 导出DataFrame到Excel(指定openpyxl引擎) df.to_excel('subnet_list.xlsx', index=False, engine='openpyxl') # 加载工作簿并设置格式 wb = load_workbook('subnet_list.xlsx') ws = wb.active # 遍历Aggregate列,合并空值对应的单元格 current_aggregate = None start_row = 2 for row in range(2, ws.max_row + 1): cell_value = ws[f'A{row}'].value if cell_value != '': if current_aggregate is not None and row > start_row: ws.merge_cells(f'A{start_row}:A{row-1}') ws[f'A{start_row}'].alignment = Alignment(horizontal='left', vertical='center') current_aggregate = cell_value start_row = row # 处理最后一组数据 if start_row < ws.max_row: ws.merge_cells(f'A{start_row}:A{ws.max_row}') ws[f'A{start_row}'].alignment = Alignment(horizontal='left', vertical='center') # 保存设置后的工作簿 wb.save('subnet_list.xlsx')
内容的提问来源于stack exchange,提问作者ver_roh
相关产品推荐
相关产品推荐

