Pandas可以用合并的单元格编写excel文件吗?

uqzxnwby  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(93)

我有一些数据,我想导出Excel电子表格。数据包含元素数量可变的嵌套字典。
看起来是这样的

[{ "12345" :
    { "cup" : "123456789",
      "spoon" : "234567891",
    }
 },
 { "23456" :
    { "plate" : "345678912",
    }
 }
]

字符串
我想在Excel电子表格中导出此数据,该电子表格如下所示:


的数据
我的数据更复杂,但我想如果我知道如何完成这一点,我可以自己应用它。
所以我在考虑使用xlsxwriter Python模块,但我必须循环遍历数据来创建单元格。然后我想起Pandas有一个简单的方法在数据框架中导入这样的数据,并有一个很好的excel导出。
但我现在不知道Pandas是否支持合并单元格之类的东西。
在这种情况下你建议用什么?

dfty9e19

dfty9e191#

这可以通过Xlsxwriter来实现。
这是一个例子,我已经包括了一些额外的数据在列表中显示;

import xlsxwriter

data_list = [
    {"12345":
         {"cup": "123456789",
          "spoon": "234567891",
          }
     },
    {"23456":
         {"plate": "345678912",
          }
     },
    {"11111":
         {"knife": "12121212",
          "fork": "23232323",
          "spoon": "34343434"
          }
     },
    {"22222":
         {"cup": "56565656",
          "saucer": "67676767"
          }
     }
]

### New workbook and sheet
wb = xlsxwriter.Workbook('xlsxwriter_merge_example.xlsx')
ws = wb.add_worksheet()

### Cell formatting
header_format = wb.add_format({"bold": True, "num_format": "0", "align": "center", "valign": "vcenter", "border": 1})
cell_format_str = wb.add_format({"border": 1})
cell_format_num = wb.add_format({"num_format": "0", "border": 1})

ws.write(0, 0, 'Order', header_format)
ws.merge_range("B1:C1", "Item", header_format)

row_index = 1
for row_data in data_list:
    for col_index, (cell_key, cell_value) in enumerate(row_data.items()):
        if len(cell_value) >= 2:
            ws.merge_range(row_index,
                           col_index,
                           (row_index + len(cell_value)) - 1,
                           col_index,
                           int(cell_key),
                           header_format)
        else:
            ws.write(row_index, col_index, int(cell_key), header_format)
        for item_key, item_value in cell_value.items():
            ws.write(row_index, col_index + 1, item_key, cell_format_str)
            ws.write(row_index, col_index + 2, int(item_value), cell_format_num)
            row_index += 1

ws.autofit()
wb.close()

字符串
带有额外数据的输出表。
已应用最少量的格式设置。
x1c 0d1x的数据

相关问题