表格格式在熊猫上转换为HTML样式

时间:2019-01-09 15:18:41

标签: python html css pandas

我正在用一个来自pandas数据框的表格生成HTML电子邮件。我正在使用pandas样式将CSS添加到结果表中,但是无法使表的边框看起来正确。 CSS不会应用于表格,因此我的border-collapse标签被忽略了,每个单元格周围都有单独的边框。

我已经检查了生成的HTML,并且在CSS中有一个与表相关的id标记。这适用于以td标签为目标但不在table标签上的选择器。当我从HTML手动删除此ID时,生成的输出很好。我的问题是如何在python中获得这种效果?

我正在使用python 2.7.2和pandas 0.23.4

import pandas as pd
df = pd.DataFrame([[1,2,3],[4,-5,6]])
styles = [ {'selector': 'table',
           'props': [('border', '1px solid lightgrey'),
                     ('border-collapse', 'collapse')]},
          {'selector': 'tbody td',
           'props': [('border', '1px solid lightgrey'),
                     ('font-size', '11.5px'),
                     ('font-family', 'arial'),
                     ('text-align', 'center'),
                     ('width', '120')]}
          ]

html = df.style.set_table_styles(styles).render()

实际有#T_094a3270_141f_11e9_99b1_18a905bf8925 table {

<style  type="text/css" >
    #T_094a3270_141f_11e9_99b1_18a905bf8925 table {
    ... params
    }    #T_094a3270_141f_11e9_99b1_18a905bf8925 tbody td {
    ... params
    }</style>  
<table id="T_094a3270_141f_11e9_99b1_18a905bf8925" > 
... etc

预期只有table {

<style  type="text/css" >
    table {
    ... params
    }    #T_094a3270_141f_11e9_99b1_18a905bf8925 tbody td {
    ... params
    }</style>  
<table id="T_094a3270_141f_11e9_99b1_18a905bf8925" > 
... etc

3 个答案:

答案 0 :(得分:1)

我很想知道是否有人对此有答案,但是我已经通过手动添加字符串

解决了
<style  type="text/css" >
    table {
          border: 1px solid lightgrey;
          border-collapse: collapse;
</style>  
创建后

到我的html的前面。

尽管在浏览器中看起来不错,但这仍然对html电子邮件毫无影响。

谢谢

答案 1 :(得分:1)

我认为,可以使用一个小技巧来对表格本身进行样式设置。由于import requests import pandas as pd from urllib.request import urlopen from bs4 import BeautifulSoup import csv html = urlopen('https://www.marketwatch.com/investing/stock/MMM/financials/') soup = BeautifulSoup(html, 'html.parser') ids = ['cash-flow','cash-flow/quarter'] with open("news.csv", "w", newline="", encoding='utf-8') as f_news: csv_news = csv.writer(f_news) csv_news.writerow(["A"]) for id in ids: a = soup.find("Cash Dividends Paid - Total", id=id) csv_news.writerow([a.text]) 在前面添​​加了表格的ID,因此您可以通过传递空的选择器(如

)来使用它向ID本身添加样式
pandas

答案 2 :(得分:0)

在选择器th和td而不是表中保留边界折叠。可以。