2016-06-15 3 views
3

다른 셀의 형식을 설정할 때 문제가 있습니다. 다른 형식으로 표시해야하는 숫자가 포함 된 두 개의 데이터 프레임이 있습니다. 내 문제를 보여주는 간단한 예제를 만들었습니다. 이제 문제는 예를 들어 내가 % 또는 다른 형식으로 노란색으로 표시된 셀을 설정할 수 있다는 것입니다Xlsxwriter가 동일한 열의 다른 셀에 다른 형식을 사용합니다.

Shows output

:

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() 

이 코드는 엑셀 시트를 생산하고 있습니다. 전체 열이나 행에 형식을 설정할 수 있다는 것을 알고 있지만 일부 특정 셀의 형식을 설정하는 방법을 해결할 수 없었습니다. 나는 이것에 대한 정말 쉬운 해결책이 있다고 생각한다.

답변

1

Excel의 열 형식은 전체 열에 적용되며 행 형식이나 셀 형식으로 만 재정의 할 수 있습니다.

따라서 형식을 다르게 지정하려는 셀에 셀 형식을 적용해야하며 팬더 인터페이스에서는 불가능합니다.

다른 방법으로 관심있는 셀 범위에 조건부 서식을 사용할 수 있습니다. XlsxWriter 문서에서 예를 들어 this Pandas program을 참조하십시오.

+0

도움을 주신 탱크, 나는 이것에 대한 간단한 해결책이 없다는 것에 놀라지 만, conditional_format을 사용하면 좋습니다. – Siesta

2

f2rows이 dataframe의 행의 수이며, 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()