python - Pandas 数据框 to_html 单元格对齐

标签 python html pandas formatting conditional-statements

我有一个 Pandas 数据框,如下所示:

    X     Y        Z
  abc   0.2     -1.5
  efg   0.8     -1.4

我想使用 to_html() 方法从中生成 HTML,但我希望 X 列左对齐,Y 列和 Z 右对齐。另外,我想将负 float 显示为(1.5)和(1.4),并将它们的字体颜色设置为红色。看起来 to_html() 中有一个格式化程序选项,似乎我可以用括号显示负数,但我不知道如何在这种情况下设置对齐方式和字体颜色。

任何帮助将不胜感激。

最佳答案

我一直在研究同样的正确理由问题。这似乎是一个已知问题(请参阅上面@TomAugspurger 的评论)。我使用您的解决方案来显示带有括号的负数,并且能够得到正确的工作理由。然而,有一个问题。您需要有正数的前导和尾随特殊字符才能完成此操作。

首先,计算出您想要右对齐的最长 float 中有多少位有效数字。

import pandas as pd
import numpy as np

#Create pandas dataframe who's values are floats of varying length
df = pd.DataFrame(np.random.randn(10, 2), columns=['Y', 'Z']) * 10000

#Determine the length of the longest float
y = len(str(max(abs(df.Y))))
z = len(str(max(abs(df.Z))))
if y > z:
    print(y)
else:
    print(z)

我不知道为什么df.to_html(float_format = lambda x: '{:f}'.format(x)不会右对齐结果,因为浮点默认右对齐。

我还尝试通过添加前导空格使每个 float 具有最小长度来欺骗函数正确对齐,以便它们在右侧对齐 df.to_html(float_format = lambda x: '{:20f}'.format(x) ,但在转换为 html 时,对于 x < 20 个有效数字(或您在格式声明中指定的任意数字),会省略前导空格。

我发现,对于有效数字较少的 float ,强制在 html 输出中显示前导空格的唯一方法是在 float 周围使用特殊字符,并将 float 的有效数字格式指定为至少 1比实际最长值长。在下面的代码块中,我将浮点长度设置为最小 20 个字符,但可以限制为最大值(我们之前打印的)加 1。

#Convert df to html using '(x)' to denote -x and '+x+' to denote +x and right justify
df.to_html(float_format = lambda x: '({:20f})'.format(abs(x)) if x < 0 else '+{:20f}+'.format(abs(x)))

我欢迎使用更优雅的方式来做到这一点。

  • Windows 7 64 位
  • Python 3.5.2
  • Pandas 0.18.1
  • Numpy 1.11.1

关于python - Pandas 数据框 to_html 单元格对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33400176/

相关文章:

python-3.x - Pandas 数据框与列表与元组等的内存使用/效率。

python - 在 Pandas 数据框中完全打印很长的字符串

python - Pandas 数据帧 : group across years

python - 使用 apply() 自定义函数创建新列时出现 Pandas 内存错误

Python/Numpy 属性错误 : 'float' object has no attribute 'sin'

javascript - 使用 CSS 逐渐改变图像(删除过渡)

javascript - 我们可以使用 jquery 更改 html 或 body 高度吗?

python - swig python 包装指向多态类型的指针的 C++ vector

python - 无法隐藏或禁用 QWizard 上的关闭按钮

html - Bootstrap 导航栏确实切换