Здесь используется стиль с использованием стратегии Pandas> 0,20.
import pandas as pd
from pandas.compat import StringIO
import xlsxwriter
import xlwt
import openpyxl
csvdata = StringIO("""date,LASTA,LASTB,LASTC
1999-03-15,-2.5597,8.20145,16.900
1999-03-17,2.6375,8.12431,17.125
1999-03-18,2.6375,-8.27908,16.950
1999-03-19,2.6634,8.54914,17.325
1999-04-06,2.8537,7.63703,17.750""")
df = pd.read_csv(csvdata, sep=",", index_col="date", parse_dates=True, infer_datetime_format=True)
def color_negative_red(val):
color = 'red' if val < 0 else 'white'
return 'background-color: %s' % color
df.style.\
applymap(color_negative_red).\
to_excel('styletest.xlsx', engine='openpyxl')
Стиль с использованием стратегии XlsxWriter.Возможно, это обеспечивает более легкий доступ к данным, которые нужно стилизовать.
import pandas as pd
from pandas.compat import StringIO
import xlsxwriter
import xlwt
import openpyxl
csvdata = StringIO("""date,LASTA,LASTB,LASTC
1999-03-15,-2.5597,8.20145,16.900
1999-03-17,2.6375,8.12431,17.125
1999-03-18,2.6375,-8.27908,16.950
1999-03-19,2.6634,8.54914,17.325
1999-04-06,2.8537,7.63703,17.750""")
df = pd.read_csv(csvdata, sep=",", index_col="date", parse_dates=True, infer_datetime_format=True)
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter("styletest.xlsx", engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')
# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Add some cell formats.
format1 = workbook.add_format({'num_format': '#,##0.00'})
format2 = workbook.add_format({'num_format': '0%'})
format3 = workbook.add_format({'bg_color': 'yellow'})
# Set the column width and format.
worksheet.set_column('B:B', 18, format2)
worksheet.set_row(2, 5, format3)
# Set the format but not the column width.
worksheet.set_column('C:C', None, format2)
# Close the Pandas Excel writer and output the Excel file.
writer.save()
Переход к подмножеству данных в DataFrame
с помощью Multiindex
.
import pandas as pd
import numpy as np
midx = pd.MultiIndex.from_product([['A0','A1'], ['B0','B1','B2','B3']])
columns = ['foo', 'bar']
df = pd.DataFrame(np.arange(16).reshape((len(midx), len(columns))),index=midx, columns=columns)
def style(val):
return 'background-color: yellow'
idx = pd.IndexSlice[:, 'B0':'B1']
print(df.loc[idx,:])
df.style.applymap(style, subset=idx).to_excel('styletest.xlsx', engine='openpyxl')
.указанный IndexSlice
не работает.Но это должен быть образец.