从pandas单元格中删除html格式

时间:2016-12-26 22:42:20

标签: python html css pandas jupyter

我在pandas上有这个DataFrame:

import pandas as pd
df = pd.DataFrame({'CARGO': {53944: 'Driver',
57389: 'Driver',
  60851: 'Driver',
  64322: 'Driver',
  67771: 'Driver'},
 'DATE': {53944: '05/2015',
  57389: '06/2015',
  60851: '07/2015',
  64322: '08/2015',
  67771: '09/2015'},
 'DESCRICAO': {53944: '\\Salario R$ 788,00\nGratificacao Adicional R$ 251,00\nGRATIFICAÇÃO R$ 512,00\nINSS R$ -104,00',
  57389: '\\Salario R$ 788,00\nGratificacao Adicional R$ 251,00\nGRATIFICAÇÃO R$ 512,00\nINSS R$ -104,00',
  60851: '\\Salario R$ 788,00\n1/3 de Ferias R$ 516,95\nGratificacao Adicional R$ 251,00\nGRATIFICAÇÃO R$ 512,00\nINSS R$ -104,00',
  64322: '\\Salario R$ 788,00\nGratificacao Adicional R$ 251,00\nGRATIFICAÇÃO R$ 512,00\nINSS R$ -104,00',
  67771: '\\Salario R$ 788,00\nGratificacao Adicional R$ 225,90\nGRATIFICAÇÃO R$ 512,00\nINSS R$ -104,00'},
 'NOME': {53944: 'John Smith',
  57389: 'John Smith',
  60851: 'John Smith',
  64322: 'John Smith',
  67771: 'John Smith'}})

它呈现此输出:

enter image description here]

如何设置pandas或Jupyter以便: 1.显示明文 2.接受换行符('\ n')

编辑1:

我希望它像这样: enter image description here

4 个答案:

答案 0 :(得分:2)

你可以试试这些,用html换行标记<br>替换换行符,并明确使用.to_html()HTML进行显示,并设置{{1 } {}为max_colwidth,以便在转换为-1时不会截断长行:

html

enter image description here

答案 1 :(得分:1)

问题的第一部分已经解决。

在降价时,$表示mathjax上公式的开头。解决方案是在符号前面加一个反斜杠。这是大熊猫的片段:

def fix_dollar_sign(x):
   return re.sub('\$','\\$',x) # remember regex also uses dollar sign.
df['DESCRICAO'] = df['DESCRICAO'].apply(fix_dollar_sign)

我无法在单元格内创建新行。

答案 2 :(得分:0)

扩展Psidom的优秀答案,您可以将其封装在可重复使用的功能中。这样您就不会永久改变数据框:

from IPython.core.display import HTML

def convert_newlines(s):
    return s.replace('\n', '<br>') if isinstance(s, str) else s

def show_dataframe(df):
    return HTML(df.applymap(convert_newlines).to_html(escape=False)) 

答案 3 :(得分:0)

这开辟了一些有趣的可能性,比如在数据框html上突出显示一些文本。这是我的尝试:

def highlight_text_on_descricao(df_rubrica = tab, texto='', cor='red'):
    def marca_texto(x,text,color):

        x, text, color, = str(x).upper(), str(text).upper(), str(color).lower()
        marcador_primario =  [m.start() for m in re.finditer(text , x)]
        if marcador_primario == []:
            return re.sub('\$','\\$',re.sub('\n','<br>',x))
        contexto = ''
        for item in marcador_primario:
            marcador_inicio = x[:item].rfind('\n')

            if marcador_inicio == -1:
                marcador_inicio = 0
            marcador_final = x.find("\n",item + 1) 
            if marcador_final == -1:
                contexto +=  "<font color='" + color + "'><b> " + x[marcador_inicio:]
            else:
                contexto +=  "<font color='" + color + "'><b> " + x[marcador_inicio:marcador_final
                            ] + '</font color></b>'
        marcador_do_primeiro_vermelho = x[:marcador_primario[0]].rfind('\n')
        if marcador_do_primeiro_vermelho == -1:
            descricao =  contexto + x[marcador_final:]
        else:
            descricao =  x[:marcador_do_primeiro_vermelho] + contexto + x[marcador_final:]
        return re.sub('\$','\\$',re.sub('\n','<br>',descricao))
    df_temp = df_rubrica
    df_temp = df_temp.rename(columns={'DESCRICAO':'DESCRICAO_LONG_TEXT_STRING____'})
    df_temp['DESCRICAO_LONG_TEXT_STRING____'] = df_temp['DESCRICAO_LONG_TEXT_STRING____'].apply(marca_texto,args=(texto,cor,))
    display(HTML(df_temp.to_html(escape=False)))

highlight_text_on_descricao(tab,'GRATIFICAÇÃO')

yelds:

enter image description here

(顺便说一句,我在Henry Hammond(https://github.com/HHammond/PrettyPandas)的custom.css上添加了一些内容,这就是为什么标题和索引都是灰色的。