【问题标题】:Remove html formatting from pandas cell从 pandas 单元格中删除 html 格式
【发布时间】:2017-05-11 06:11:02
【问题描述】:

我在 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'}})

它呈现这个输出:

]

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

编辑 1:

我希望它是这样的:

【问题讨论】:

  • 您能举一个例子说明您希望如何格式化纯文本吗?
  • 我编辑了这个问题。单元格末尾的反斜杠“\”是一个意外,但我没有更改它,所以它会使事情复杂化。

标签: python html css pandas jupyter


【解决方案1】:

你可以试试这些东西,用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))

【讨论】:

  • 这是最好的答案!它解决了问题!非常感谢!
【解决方案2】:

第一部分问题解决了。

在 markdown 中,$ 代表 mathjax 公式的开始。解决方案是在符号前插入反斜杠。这是 pandas 的 sn-p:

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

.

我无法在牢房内换行..

【讨论】:

    【解决方案3】:

    扩展 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)) 
    

    【讨论】:

      【解决方案4】:

      这开辟了一些有趣的可能性,例如突出显示数据框 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')
      

      产量:

      (顺便说一句,我从 Henry Hammond(https://github.com/HHammond/PrettyPandas) 在 custom.css 上添加了一些东西,所以这就是标题和索引是灰色的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-26
        • 2017-11-20
        • 1970-01-01
        • 1970-01-01
        • 2021-07-06
        • 2015-06-01
        • 2015-08-01
        • 1970-01-01
        相关资源
        最近更新 更多