如何使用 to_html 将 CSS 类(我的风格)应用到 Pandas DataFrame

How to apply CSS class (my style) to Pandas DataFrame using to_html

抱歉,我是 HTML 和 CSS 新手。

目标是从数据框创建 HTML 表格并通过电子邮件发送。

但是我怎样才能使输出表变得时尚呢?

让我想要不同的背景标题、字体等?

这是我要实现的样式:

mystyle = 

'''

.mystyle {

  font-size: 11pt; 

  font-family: Arial;

  border-collapse: collapse; 

  border: 1px solid silver;



}



.mystyle td, th {

  padding: 5px;

}



.mystyle tr:nth-child(even) {

  background: #E0E0E0;

}



.mystyle tr:hover {

  background: silver;

  cursor: pointer;

}



'''

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import pandas as pd

import datetime as dt



yesterday = dt.datetime.now() - dt.timedelta(days=1)

date ="'" + yesterday.strftime('%m-%d-%Y') +"'"





df = pd.DataFrame({

        'Position': ['DBA','CEO','Underwriter']

        ,'Salary': [100000,300000,60000]

        ,'Posted':['2019-01-01', '2019-05-01', '2019-03-15']

        ,'Link': ['myjob.com','ceo.com','insurance.com']

        })

html ="""\\

<html>

 <head>Report for""" + date +"""</head>

 <body>

  {0}

 </body>

</html>

""".format(df.to_html())

print(html)
message_start = f"""

<head>

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

 Report for {date}"""

message_style ="""

 <style type="text/css" media="screen">

  #customers {

   font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;

   font-size: 12px;

   border-collapse: collapse;

   width: 100%;

  }



  #customers td, #customers th {

   border: 1px solid #ddd;

   padding: 8px;

  }



  #customers tr:nth-child(even){background-color: #f2f2f2;}



  #customers tr:hover {background-color: #ddd;}



  #customers th {

   padding-top: 12px;

   padding-bottom: 12px;

   text-align: left;

   background-color: #4CAF50;

   color: white;

  }

 </style>

</head>

<body>

"""

message_body = df.to_html(index=False, table_id="customers") #set table_id to your css style name

message_end ="""</body>"""

messages = (message_start + message_style + message_body + message_end)

part = MIMEText(messages, 'html') # create MIMEText

msg.attach(part) 

...

那么我怎样才能在下面的代码中实现 mystyle 并获得时尚的表格?我试过 df.to_html(classes=mystyle) 但它不起作用

mystyle = 

'''

.mystyle {

  font-size: 11pt; 

  font-family: Arial;

  border-collapse: collapse; 

  border: 1px solid silver;



}



.mystyle td, th {

  padding: 5px;

}



.mystyle tr:nth-child(even) {

  background: #E0E0E0;

}



.mystyle tr:hover {

  background: silver;

  cursor: pointer;

}



'''

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import pandas as pd

import datetime as dt



yesterday = dt.datetime.now() - dt.timedelta(days=1)

date ="'" + yesterday.strftime('%m-%d-%Y') +"'"





df = pd.DataFrame({

        'Position': ['DBA','CEO','Underwriter']

        ,'Salary': [100000,300000,60000]

        ,'Posted':['2019-01-01', '2019-05-01', '2019-03-15']

        ,'Link': ['myjob.com','ceo.com','insurance.com']

        })

html ="""\\

<html>

 <head>Report for""" + date +"""</head>

 <body>

  {0}

 </body>

</html>

""".format(df.to_html())

print(html)
message_start = f"""

<head>

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

 Report for {date}"""

message_style ="""

 <style type="text/css" media="screen">

  #customers {

   font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;

   font-size: 12px;

   border-collapse: collapse;

   width: 100%;

  }



  #customers td, #customers th {

   border: 1px solid #ddd;

   padding: 8px;

  }



  #customers tr:nth-child(even){background-color: #f2f2f2;}



  #customers tr:hover {background-color: #ddd;}



  #customers th {

   padding-top: 12px;

   padding-bottom: 12px;

   text-align: left;

   background-color: #4CAF50;

   color: white;

  }

 </style>

</head>

<body>

"""

message_body = df.to_html(index=False, table_id="customers") #set table_id to your css style name

message_end ="""</body>"""

messages = (message_start + message_style + message_body + message_end)

part = MIMEText(messages, 'html') # create MIMEText

msg.attach(part) 

...

关于python:如何使用 to_html 将 CSS 类(我的风格)应用到 Pandas DataFrame


您无需为此创建 css 文件。如果将它们连接到字符串,一切都可以正常工作。这是我通常的做法:

mystyle = 

'''

.mystyle {

  font-size: 11pt; 

  font-family: Arial;

  border-collapse: collapse; 

  border: 1px solid silver;



}



.mystyle td, th {

  padding: 5px;

}



.mystyle tr:nth-child(even) {

  background: #E0E0E0;

}



.mystyle tr:hover {

  background: silver;

  cursor: pointer;

}



'''

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import pandas as pd

import datetime as dt



yesterday = dt.datetime.now() - dt.timedelta(days=1)

date ="'" + yesterday.strftime('%m-%d-%Y') +"'"





df = pd.DataFrame({

        'Position': ['DBA','CEO','Underwriter']

        ,'Salary': [100000,300000,60000]

        ,'Posted':['2019-01-01', '2019-05-01', '2019-03-15']

        ,'Link': ['myjob.com','ceo.com','insurance.com']

        })

html ="""\\

<html>

 <head>Report for""" + date +"""</head>

 <body>

  {0}

 </body>

</html>

""".format(df.to_html())

print(html)
message_start = f"""

<head>

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

 Report for {date}"""

message_style ="""

 <style type="text/css" media="screen">

  #customers {

   font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;

   font-size: 12px;

   border-collapse: collapse;

   width: 100%;

  }



  #customers td, #customers th {

   border: 1px solid #ddd;

   padding: 8px;

  }



  #customers tr:nth-child(even){background-color: #f2f2f2;}



  #customers tr:hover {background-color: #ddd;}



  #customers th {

   padding-top: 12px;

   padding-bottom: 12px;

   text-align: left;

   background-color: #4CAF50;

   color: white;

  }

 </style>

</head>

<body>

"""

message_body = df.to_html(index=False, table_id="customers") #set table_id to your css style name

message_end ="""</body>"""

messages = (message_start + message_style + message_body + message_end)

part = MIMEText(messages, 'html') # create MIMEText

msg.attach(part) 

...

相关推荐

  • Spring部署设置openshift

    Springdeploymentsettingsopenshift我有一个问题让我抓狂了三天。我根据OpenShift帐户上的教程部署了spring-eap6-quickstart代码。我已配置调试选项,并且已将Eclipse工作区与OpehShift服务器同步-服务器上的一切工作正常,但在Eclipse中出现无法消除的错误。我有这个错误:cvc-complex-type.2.4.a:Invali…
    2025-04-161
  • 检查Java中正则表达式中模式的第n次出现

    CheckfornthoccurrenceofpatterninregularexpressioninJava本问题已经有最佳答案,请猛点这里访问。我想使用Java正则表达式检查输入字符串中特定模式的第n次出现。你能建议怎么做吗?这应该可以工作:MatchResultfindNthOccurance(intn,Patternp,CharSequencesrc){Matcherm=p.matcher…
    2025-04-161
  • 如何让 JTable 停留在已编辑的单元格上

    HowtohaveJTablestayingontheeditedcell如果有人编辑JTable的单元格内容并按Enter,则内容会被修改并且表格选择会移动到下一行。是否可以禁止JTable在单元格编辑后转到下一行?原因是我的程序使用ListSelectionListener在单元格选择上同步了其他一些小部件,并且我不想在编辑当前单元格后选择下一行。Enter的默认绑定是名为selectNext…
    2025-04-161
  • Weblogic 12c 部署

    Weblogic12cdeploy我正在尝试将我的应用程序从Tomcat迁移到Weblogic12.2.1.3.0。我能够毫无错误地部署应用程序,但我遇到了与持久性提供程序相关的运行时错误。这是堆栈跟踪:javax.validation.ValidationException:CalltoTraversableResolver.isReachable()threwanexceptionatorg.…
    2025-04-161
  • Resteasy Content-Type 默认值

    ResteasyContent-Typedefaults我正在使用Resteasy编写一个可以返回JSON和XML的应用程序,但可以选择默认为XML。这是我的方法:@GET@Path("/content")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})publicStringcontentListRequestXm…
    2025-04-161
  • 代码不会停止运行,在 Java 中

    thecodedoesn'tstoprunning,inJava我正在用Java解决项目Euler中的问题10,即"Thesumoftheprimesbelow10is2+3+5+7=17.Findthesumofalltheprimesbelowtwomillion."我的代码是packageprojecteuler_1;importjava.math.BigInteger;importjava…
    2025-04-161
  • Out of memory java heap space

    Outofmemoryjavaheapspace我正在尝试将大量文件从服务器发送到多个客户端。当我尝试发送大小为700mb的文件时,它显示了"OutOfMemoryjavaheapspace"错误。我正在使用Netbeans7.1.2版本。我还在属性中尝试了VMoption。但仍然发生同样的错误。我认为阅读整个文件存在一些问题。下面的代码最多可用于300mb。请给我一些建议。提前致谢publicc…
    2025-04-161
  • Log4j 记录到共享日志文件

    Log4jLoggingtoaSharedLogFile有没有办法将log4j日志记录事件写入也被其他应用程序写入的日志文件。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化?Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现。它还支持syslogd和Windows事件日志,这对于尝试将日志输出与来自非Java应用程序…
    2025-04-161