2016-12-26 49 views
2

我有熊猫这个数据帧:删除HTML代码大熊猫单元格格

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]

我如何建立大熊猫或Jupyter所以它会: 1. display plaintext 2. accept line break('\ n')

编辑1:

我倒是希望它是这样的: enter image description here

+0

你能举一个例子说明你想如何格式化明文吗 – akaihola

+0

我编辑了这个问题在单元格末尾的backslah“\”是一个意外,但我没有改变它会使事情变得复杂。 – nicmano

回答

2

您可以尝试这些东西,替换HTML换行标记的新行字符<br>并明确使用.to_html()HTML的显示,同时还设置max_colwidth-1,使得长行不会被截断转换为html时:

from IPython.core.display import HTML 
pd.set_option('display.max_colwidth', -1) 
df['DESCRICAO'] = df['DESCRICAO'].str.replace('\$', '\\$').str.replace('\n', '<br>') 
HTML(df.to_html(escape=False)) 

enter image description here

+0

这是最好的答案!它解决了问题!非常感谢! – nicmano

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) 

我wasn't能够使细胞内的一个新行..

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

这开辟了一些有趣的可能性,就像highliting的数据框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

(顺便说一句,我得到了加在custom.css一些东西从亨利·哈蒙德(https://github.com/HHammond/PrettyPandas),所以that's为什么头并且索引是灰色的