xlsxwriter編寫複雜表頭

2021-09-24 04:43:24 字數 3037 閱讀 5212

作為一名資料分析小白,並且第一次寫blog,如果有錯,請多多指教。並且**可能太手工了,如果有更高效、簡易的寫法,請指點一下。

先上圖,做成的效果大概就這個樣子,在excel中,如果要做成這種圖,很簡單,就是合併單元格的事。但在python裡面寫,就難倒我了。看完資料後,發現有兩個方向可以做成複雜表頭。①xlsxwriter包;②pandas的multiindex功能。

我用的就是第乙個方法,xlsxwriter。主要幾個技術點:

①單元格合併 - merge_range

②內容填入單元格 - worksheet.writer() / worksheet.writer_column()

③單元格格式 - workbook.add_format() [可設定居中、粗體、斜體、文字大小、顏色、背景等]

此外,按照官方的教程,其實可以用with語句,就可以最後不寫workbook.close()。並且,可以結合pandas一起用。(教程還沒看完,稍後有感覺再補。)

最後,等看完pandas的multiindex後,我再換乙個pandas的寫法吧。

import xlsxwriter

workbook = xlsxwriter.

workbook

('sample.xlsx'

)worksheet = workbook.

add_worksheet

("sheet1"

)worksheet.

set_column

('b:f',19

)worksheet.

set_column

('a:a'

,14.5

)cell_format = workbook.

add_format()

#表頭worksheet.

merge_range

('a1:a2'

,'指標'

,cell_format)

worksheet.

merge_range

('b1:c1'

,'規模'

,cell_format)

worksheet.

merge_range

('d1:f1'

,'增長率'

,cell_format)

worksheet.

write

('b2'

,'1903'

,cell_format)

worksheet.

write

('c2'

,'ytd1903'

,cell_format)

worksheet.

write

('d2'

,'1903 vs. 1902'

,cell_format)

worksheet.

write

('e2'

,'1903 vs. 1803'

,cell_format)

worksheet.

write

('f2'

,'ytd1903 vs. ytd1803'

,cell_format)

#內容df =[[

'銷售額(百萬元)'

,'銷售量(百萬盒)'

,'單價(元/盒)'],

[1,2

,3],

[4,5

,6],

[7,8

,9],

[10,11

,12],

[13,14

,15]]

worksheet.

write_column

('a3'

,df[0]

,cell_format)

worksheet.

write_column

('b3'

,df[1]

,cell_format)

worksheet.

write_column

('c3'

,df[2]

,cell_format)

worksheet.

write_column

('d3'

,df[3]

,cell_format)

worksheet.

write_column

('e3'

,df[4]

,cell_format)

worksheet.

write_column

('f3'

,df[5]

,cell_format)

workbook.

close

()

看了好多文章後發現,單純用pandas,好像沒法直接構建成想要的多級表頭,只能逐個把索引寫出來。(可能有這功能,但我沒找到吧。)

在我的源資料中,規模、銷量是存在的,但同比要計算一次,所以在沒找到方法前,就以只能手寫表頭了。(其實column那裡也可以用pd.multiindex.from_product來簡化**。)

df1 = pd.

dataframe

(np.random.

randint(0

,150

,size=(4

,6))

, index =

list

('東南西北'),

columns=[[

'規模'

,'規模'

,'銷量'

,'銷量'

,'同比'

,'同比'],

['上月'

,'本月'

,'上月'

,'本月'

,'規模'

,'規模']]

);

複雜鍊錶的複製 python編寫

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 題目分析 1.如果鍊錶為空鍊錶,則返回本身即可 2.如果非空 需要進行複製操作,...

複雜SQL的編寫要領

sql的編碼顯得越來越重要,原因是很多邏輯處理,都可以跟sql掛鉤。個人排斥將邏輯層 複雜化,因此sql在未來的專案架構中,舉足輕重,特地開一章節,來總結一下以往專案中sql的精髓部分。顯示某個店鋪的任務列表,同時把某個使用者的任務完成情況列出來。傳入使用者的id user值,看看該使用者是否完成任...

複雜鍊錶複製

複雜鍊錶複製的標頭檔案mlist.h ifndef mlist h define mlist h include include includetypedef int datatype typedef struct node node,pnode,plist pnode crealist datat...