Xlsxwriter将不同的格式写入同一列中的不同单元格

设置不同单元格的格式时遇到问题。 我有两个数据框,其中包含应以不同格式显示的数字。 我创build了一个简单的例子来显示我的问题。

import pandas as pd import numpy as np import xlsxwriter frame1 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('ABCD')) #want to show this frame as percentage in Excel later frame2 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('EFGH')) writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') frame1.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow= 0) frame2.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow = (2 + len(frame1))) writer.save() 

此代码生成此Excel表单:

显示输出

现在的问题是,我可能想要设置标记为黄色的单元格为%或其他格式。 我知道我可以在整列或者一行上设置格式,但是我还没有能够解决如何为一些特定的单元格设置格式。 我想有一些非常简单的解决scheme。

Excel中的列格式适用于整个列,只能由行格式或单元格格式覆盖。

因此,您需要将单元格格式应用于您想以不同格式进行格式化的单元格,而Pandas界面不可能。

另一种方法是使用条件格式来表示您感兴趣的单元格范围。例如,请参阅XlsxWriter文档中的Pandas程序 。

解决方法是使用conditional_format ,如@jmcnamara所述,只需应用{'type': 'top','value': str(f2rows),'format': format1} ,其中f2rows是行数你的数据format1和格式1是你想要应用的格式。

 import pandas as pd import numpy as np import xlsxwriter frame1 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('ABCD')) #want to show this frame as percentage in Excel later frame2 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('EFGH')) writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') frame1.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow= 0) frame2.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow = (2 + len(frame1))) # Get the xlsxwriter workbook and worksheet objects. workbook = writer.book worksheet = writer.sheets['Sheet1'] f2rows = frame2.shape[0] startR = 4 + len(frame1) endR = startR + f2rows -1 # Apply a conditional format to the cell range. format1 = workbook.add_format({'bg_color': '#FFFF00', 'font_color': '#9C0006'}) worksheet.conditional_format('C{}:C{}'.format(startR, endR), {'type': 'top', 'value': str(f2rows), 'format': format1}) worksheet.conditional_format('E{}:E{}'.format(startR, endR), {'type': 'top', 'value': str(f2rows), 'format': format1}) writer.save()