每个this example的to_excel
方法应使用背景颜色保存Excel文件。但是,我保存的Excel文件中没有任何颜色。
我尝试同时使用 openpyxl
和 xlsxwriter
引擎进行编写。在这两种情况下,都保存了Excel文件,但是单元格的颜色/样式丢失了。
我可以读回文件并使用 openpyxl
重新格式化,但是如果这种to_excel
方法可以正常工作,为什么不呢?
这是示例代码。
import pandas as pd # version 0.24.2
dict = {'A': [1, 1, 1, 1, 1], 'B':[2, 1, 2, 1, 2], 'C':[1, 2, 1, 2, 1]}
df = pd.DataFrame(dict)
df_styled = df.style.apply(lambda x: ["background: #ffa31a" if x.iloc[0] < v else " " for v in x], axis=1)
df_styled
''' in my jupyter notebook, this displayed my dataframe with background color when condition is met, (all the 2s highlighted)'''
'''Save the styled data frame to excel using to_excel'''
df_styled.to_excel('example_file_openpyxl.xlsx', engine='openpyxl')
df_styled.to_excel('example_file_xlsxwriter.xlsx', engine='xlsxwriter')
答案 0 :(得分:0)
我自己偶然发现了这一点,据我所知,目前尚不支持导出到excel。我已经调整了您的代码,使输出与文档中的excel匹配。
这是excel方法的文档输出。
df.style.\
applymap(color_negative_red).\
apply(highlight_max).\
to_excel('styled.xlsx', engine='openpyxl')
这是您调整的代码:
import pandas as pd
dict = {'A': [1, 1, 1, 1, 1], 'B':[2,1,2,1,2], 'C':[1,2,1,2,1]}
df = pd.DataFrame(dict)
def highlight(df, color = "yellow"):
attr = 'background-color: {}'.format(color)
df_bool = pd.DataFrame(df.apply(lambda x: [True if x.iloc[0] < v else False for v in x],axis=1).apply(pd.Series),
index=df.index)
df_bool.columns =df.columns
return pd.DataFrame(np.where(df_bool, attr, ""),
index= df.index, columns=df.columns)
df.style. \
apply(highlight, axis=None).\
to_excel("styled.xlsx", engine="openpyxl")
请注意高亮功能内部,我根据您在上面的列表理解中应用的条件创建一个布尔数据框。然后,根据此数据框的结果分配样式。