保存到Excel文件时如何避免合并多级列标题中的单元格?

问题描述 投票:0回答:1

enter image description here

enter image description here

我正在尝试将 pandas 数据框输出到 Excel 中。该数据框具有列和行的多重索引。为了了解这个数据帧的结构,我将分别在第一张和第二张图片上附加一些列索引(因为它很长)和行索引。正如您所看到的,出现了一些合并的单元格,但这是不希望的。你会说我可以使用这个选项:

df.to_excel('output.csv', merge_cells=False)

但这将以如下格式连接列:2024.1.2、2024.1.3、2024.1.4 等。在单个列级别中(而不是像现在一样具有 3 个列级别,即“2024”第一级, “1”第二级,[“2”、“3”、“4”]第三级)。我想保留这三个级别,但每列重复 2024,而不是合并单元格。

我也尝试过

df.T.reset_index().T

但这并不能解决我的问题,因为列将成为表格的一部分,这也是不需要的,因为它将获取我给出的表格格式,并且不会像标题那样采用粗体和居中格式他们应该是。

我期待这样的输出:

enter image description here

python pandas excel output export-to-excel
1个回答
0
投票

我相信及时有人会指出我错过的选项,比如

sparsify=False
,如 DataFrame.to_html。同时,我建议用这种方法来解决问题。

我们可以在最顶层放置唯一的数字,以强制编写者区分每一列并编写较低级别而不合并。让我们看看它是如何工作的:

from pandas import MultiIndex, DataFrame, ExcelWriter

columns = MultiIndex.from_product([[2024],[*'AB'],[*'xy']])
data = [[*range(columns.size)]]
df = DataFrame(data, columns=columns)

#   2024         
#      A     B   
#      x  y  x  y
# 0    0  1  2  3

# put a unique number at the top of each columns
enum_cols = MultiIndex.from_arrays(
    [range(df.columns.size), *zip(*df.columns)]
)

# prepare a writer for removing column number in the end
file, sheet = 'test_multicolumn.xlsx', 'Sheet1'
writer = ExcelWriter(file, engine='openpyxl')

# replace columns with their numbered version and save to excel
df.set_axis(enum_cols, axis='columns').to_excel(writer, sheet)

# remove the level of column numbers, save and close
writer.sheets[sheet].delete_rows(1)
writer.close()

现在数据在每列中都带有标题保存。请注意,

style.hide(axis='columns', level=0)
的技巧会被
to_excel
忽略,因此我们需要编写者删除带有数字的上行(或者我们稍后在 Excel 中手动删除它)。

© www.soinside.com 2019 - 2024. All rights reserved.