2016-06-15 2 views
3

異なるセルのフォーマットを設定するときに問題があります。私は異なるフォーマットで表示されるべき数字を含む2つのデータフレームを持っています。私は私の問題を示す簡単な例を作成しました。Xlsxwriterは同じ列の異なるセルに異なるフォーマットを使用します

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シートを生成します。

Shows output

今の問題は、例えば、私は%として、またはいくつかの他の形式として黄色でマークされたセルを設定したいかもしれないということです。私は列や行全体にフォーマットを設定できることを知っていますが、私はちょうどいくつかの特定のセルのフォーマットを設定する方法を解決できませんでした。私はこれには本当に簡単な解決策がいくつかあると思います。

答えて

1

Excelの列形式は列全体に適用され、行形式またはセル形式でのみ上書きできます。

したがって、異なるフォーマットをしたいセルにセルフォーマットを適用する必要があります。これは、Pandasインターフェイスでは不可能です。

また、興味のあるセルの範囲に条件付きの書式を使用することもできます。たとえば、XlsxWriterドキュメントのthis Pandas programを参照してください。

+0

タンクは助けを求めていますが、もっと簡単な解決法はないと私は驚いていますが、conditional_formatを使っても問題ありません。 – Siesta

2

f2rowsは、あなたのデータフレームの行数であり、format1はあなたが適用したいフォーマットです@jmcnamaraで述べたように、conditional_formatを使用することになり、周りの仕事は、あなただけの{'type': 'top','value': str(f2rows),'format': format1}を、適用します。

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() 
関連する問題