从 pandas 单元格中删除 html 格式
Remove html formatting from pandas cell
我在 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:
我希望它是这样的:
问题的第一部分已解决。
在 markdown 中,$ 表示 mathjax 上公式的开始。解决方案是在符号前插入一个反斜杠。这是 pandas 的片段:
def fix_dollar_sign(x):
return re.sub('$','\$',x) # remember regex also uses dollar sign.
df['DESCRICAO'] = df['DESCRICAO'].apply(fix_dollar_sign)
.
我无法在单元格内创建新行..
你可以试试这些东西,用 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))
扩展 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))
这开启了一些有趣的可能性,例如在数据帧上突出显示某些文本 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 的东西,所以这就是为什么 headers 和索引是灰色的。
我在 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:
我希望它是这样的:
问题的第一部分已解决。
在 markdown 中,$ 表示 mathjax 上公式的开始。解决方案是在符号前插入一个反斜杠。这是 pandas 的片段:
def fix_dollar_sign(x):
return re.sub('$','\$',x) # remember regex also uses dollar sign.
df['DESCRICAO'] = df['DESCRICAO'].apply(fix_dollar_sign)
.
我无法在单元格内创建新行..
你可以试试这些东西,用 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))
扩展 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))
这开启了一些有趣的可能性,例如在数据帧上突出显示某些文本 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 的东西,所以这就是为什么 headers 和索引是灰色的。