如何在pandas dataframe.to_html()中设置单元格对齐方式

X.X*_*X.X 4 html html-table justify pandas

官方文档提供了使用to_html(justify='left/right')和设置单元格对齐的选项.但是,目前尚不清楚如何证明非标题行的合理性.

我要用hack来替换HTML部分

import pandas as pd
df = pd.DataFrame({'looooong_col':['1,234','234,567','3,456,789'],'short_col':[123,4,56]})
raw_html = df.to_html()
raw_html.replace('<tr>','<tr style="text-align: right;">')
Run Code Online (Sandbox Code Playgroud)

所以修改后的html现在是

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>looooong_col</th>
      <th>short_col</th>
    </tr>
  </thead>
  <tbody>
    <tr style="text-align: right;">
      <th>0</th>
      <td>1,234</td>
      <td>123</td>
    </tr>
    <tr style="text-align: right;">
      <th>1</th>
      <td>234,567</td>
      <td>4</td>
    </tr>
    <tr style="text-align: right;">
      <th>2</th>
      <td>3,456,789</td>
      <td>56</td>
    </tr>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

它在http://htmledit.squarefree.com/中显示确定,但是当我将其写入html文件时,单元格仍然是左对齐的.

如何解决这个问题?

ash*_*gal 6

您可以使用Styler功能.

http://pandas.pydata.org/pandas-docs/stable/style.html

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD'))
s = df.style.set_properties(**{'text-align': 'right'})
s.render()
Run Code Online (Sandbox Code Playgroud)

s.render()返回生成的CSS/HTML的字符串.请注意,生成的HTML不会是干净的,因为内部为每个单元格声明了一个单独的样式.

  • 我收到 AttributeError: 'Styler' 对象没有属性 'style' (4认同)

Yev*_*oda 5

我知道这是一个老问题,我注意到您在问当您的数字为字符串格式时如何执行此操作,即 ['1,234','234,567','3,456,789']

但是,如果 pandas 数据框中只有浮点数或浮点数和字符串的混合,那么一种方法就是:

df.to_html().replace('<td>', '<td align="right">')
Run Code Online (Sandbox Code Playgroud)

就我个人而言,我需要这样做,因为我有以下格式,我想摆脱上面的过程:

pd.options.display.float_format = '{:,.0f}'.format
df.to_html().replace('<td>', '<td align="right">')
Run Code Online (Sandbox Code Playgroud)

完美地完成了工作,并且不会像使用麦粒肿那样弄乱我的格式