简体   繁体   English

Pandas 数据框样式不适用于 Jupyter Notebook

[英]Pandas Dataframe Styles are not working with Jupyter Notebook

I have a dataframe which is constructed using a list and other dataframe that i read from excel file.我有一个数据框,它是使用我从 excel 文件中读取的列表和其他数据框构建的。 What I want to do is, I just have to apply the background color to first row of a dataframe which I would export in to an excel.我想要做的是,我只需要将背景颜色应用于我将导出到 excel 的数据框的第一行。 The below code doing the job correclty as expected.(There is issue with the data)以下代码按预期正确执行工作。(数据有问题)

The issue is the style which I have applied to the dataframe was not reflected in the excel sheet.问题是我应用于数据框的样式没有反映在 Excel 表中。 I am using Jupyter Notebook.我正在使用 Jupyter Notebook。 Please suggest a way to get the styles in excel.请提出一种在excel中获取样式的方法。

import pandas as pd

sheet1 = r'D:\dinesh\input.xlsx'
sheet2 = "D:\dinesh\lookup.xlsx"
sheet3 = "D:\dinesh\Output.xlsx"
sheetname = 'Dashboard Índice (INPUT)'

print('Started extracting the Crime Type!')
df1 = pd.read_excel(sheet1,sheet_name = 'Dashboard Índice (INPUT)',skiprows=10, usecols = 'B,C,D,F,H,J,L,N,P', encoding = 'unicode_escape')

crime_type = list(df1.iloc[:0])[3:]
print(f'crime_types : {crime_type}')
df1  = (df1.drop(columns=crime_type,axis=1))
cols = list(df1.iloc[0])

print(f'Columns : {cols}')
df1.columns = cols
df1  = (df1[1:]).dropna()

final_data = []
for index, row in df1.iterrows():   
    sheetname   = (f'{row[cols[1]]:0>2d}. {row[cols[0]]}')    
    cnty_cd     = [row[cols[0]], row[cols[1]], row[cols[2]]]
    wb = pd.ExcelFile(sheet2)

    workbook = ''.join([workbook for workbook in wb.sheet_names if workbook.upper() == sheetname])         
    if workbook:
        df2 = pd.read_excel(sheet2, sheet_name = workbook, skiprows=7, usecols ='C,D,H:T', encoding = 'unicode_escape')

        df2_cols = list(df2.columns)  
        final_cols = cols + df2_cols
        df2 = df2.iloc[2:]        
        df2 = df2.dropna(subset=[df2_cols[1]])

        for index2, row2 in df2.iterrows():             
            if row2[df2_cols[1]].upper() in crime_type:
                s1       = pd.Series(cnty_cd)                
                df_rows  = (pd.concat([s1, row2], axis=0)).to_frame().transpose()             
                final_data.append(df_rows)
                break                                                                                 
    else:
        print(f'{sheetname} does not exists!')

df3 = pd.concat(final_data)
df3.columns = final_cols
df_cols     = (pd.Series(final_cols, index=final_cols)).to_frame().transpose()
df_final    = (pd.concat([df_cols,df3], axis=0, ignore_index=True, sort=False))
df_final.style.apply(lambda x: ['background: blue' if x.name==0 else '' for i in x], axis=1)
df_final.to_excel(sheet3, sheet_name='Crime Details',index=False,header = None)

print(f'Sucessfully created the Output file to {sheet3}!')     

You need to export to excel the styled dataframe and not the unstyled dataframe and so you either need to chain your styling and sending to Excel together, similar to shown in the documentation here , or assign the styled dataframe and use that to send to Excel.您需要导出到 excel 样式数据框而不是无样式数据框,因此您需要将样式链接在一起并发送到 Excel,类似于此处的文档中所示,或者分配样式数据框并使用它发送到 Excel。
The latter could look like this based on your code:根据您的代码,后者可能如下所示:

df_styled = df_final.style.apply(lambda x: ['background: blue' if x.name==0 else '' for i in x], axis=1)
df_styled.to_excel(sheet3,, sheet_name='Crime Details',index=False, header = None, engine='openpyxl')

As described here you need either the OpenPyXL or XlsxWriter engines for export.如此处所述您需要 OpenPyXL 或 XlsxWriter 引擎进行导出。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM