如何合并不同长度的Pandas DataFrame并透视导出至Excel?
合并多结构Pandas DataFrame并生成指定格式导出Excel
我通过多个函数生成了多个不同长度的Pandas DataFrame,这些DataFrame的Header列包含不同的标识(如L1、L5等),数值列的名称也各不相同(Val1、Val2到Val9)。需要将这些DataFrame合并为一个统一的网格结构,缺失的数值用0填充,最终导出到Excel文件。
示例代码
import pandas as pd # 第一个DataFrame示例 data1 = {'Header':['L1','L2','L3'], 'Val1':[float(100),float(200),float(300)], 'Val2':[float(400),float(500),float(600)], 'Val3':[float(700),float(800),float(900)]} data1_summary = pd.DataFrame(data=data1) # 第二个DataFrame示例 data2 = {'Header':['L5','L6'], 'Val5':[float(1000),float(1100)], 'Val6':[float(1300),float(1400)]} data2_summary = pd.DataFrame(data=data2) # 第三个DataFrame示例 data3 = {'Header':['L7','L8','L9','L10'], 'Val7':[float(1900),float(2000),float(2100),float(2200)], 'Val8':[float(2900),float(2300),float(2400),float(2800)], 'Val9':[float(3500),float(3600),float(3700),float(3900)]} data3_summary = pd.DataFrame(data=data3)
期望输出格式
| Val1 | Val2 | Val3 | Val5 | Val6 | Val7 | Val8 | Val9 | |
|---|---|---|---|---|---|---|---|---|
| L1 | 100 | 400 | 700 | 0 | 0 | 0 | 0 | 0 |
| L2 | 200 | 500 | 800 | 0 | 0 | 0 | 0 | 0 |
| L3 | 300 | 600 | 900 | 0 | 0 | 0 | 0 | 0 |
| L5 | 0 | 0 | 0 | 1000 | 1300 | 0 | 0 | 0 |
| L6 | 0 | 0 | 0 | 1100 | 1400 | 0 | 0 | 0 |
| L7 | 0 | 0 | 0 | 0 | 0 | 1900 | 2900 | 3500 |
| L8 | 0 | 0 | 0 | 0 | 0 | 2000 | 2300 | 3600 |
| L9 | 0 | 0 | 0 | 0 | 0 | 2100 | 2400 | 3700 |
| L10 | 0 | 0 | 0 | 0 | 0 | 2200 | 2800 | 3900 |
解决方案
步骤说明
- 收集DataFrame:将所有生成的DataFrame存入列表,便于批量处理。
- 合并DataFrame:用
pd.concat按行合并,指定join='outer'保留所有列,同时将Header设为行索引,确保每个标识对应唯一行。 - 填充缺失值:将合并后出现的空值(NaN)替换为0,匹配期望格式。
- 导出到Excel:使用
to_excel方法将最终结果保存为Excel文件。
完整代码
import pandas as pd # 生成示例DataFrame(实际场景中由函数生成) data1 = {'Header':['L1','L2','L3'], 'Val1':[float(100),float(200),float(300)], 'Val2':[float(400),float(500),float(600)], 'Val3':[float(700),float(800),float(900)]} data1_summary = pd.DataFrame(data=data1) data2 = {'Header':['L5','L6'], 'Val5':[float(1000),float(1100)], 'Val6':[float(1300),float(1400)]} data2_summary = pd.DataFrame(data=data2) data3 = {'Header':['L7','L8','L9','L10'], 'Val7':[float(1900),float(2000),float(2100),float(2200)], 'Val8':[float(2900),float(2300),float(2400),float(2800)], 'Val9':[float(3500),float(3600),float(3700),float(3900)]} data3_summary = pd.DataFrame(data=data3) # 收集所有DataFrame到列表 df_list = [data1_summary, data2_summary, data3_summary] # 合并DataFrame并设置Header为索引 merged_df = pd.concat([df.set_index('Header') for df in df_list], axis=0, join='outer') # 填充缺失值为0 final_df = merged_df.fillna(0) # 导出到Excel final_df.to_excel('merged_data.xlsx') # 可选:打印查看结果 print(final_df)
内容的提问来源于stack exchange,提问作者Add
相关产品推荐
相关产品推荐

