我有一个Pandas数据框架,如下所示:
X Y Z
abc 0.2 -1.5
efg 0.8 -1.4我想使用to_html()方法来生成一个HTML,但是我希望X列左对齐,Y列和Z列右对齐。此外,我想使负浮点数显示为(1.5)和(1.4),字体颜色被设置为红色。看起来,在to_html()中有一个格式化程序选项,似乎可以用括号显示负数,但我不知道如何根据这种条件设置对齐和字体颜色。
任何帮助都将不胜感激。
发布于 2016-08-12 16:53:35
我一直在研究同样的正当理由问题。这似乎是一个众所周知的问题(见上面@TomAugspurger的评论)。我使用您的解决方案显示带括号的负数,并能够得到正确的理由。不过,这是个陷阱。你需要有正数的前导和尾随的特殊字符来完成这个工作。
首先,计算出最长浮点数中有多少个有效数字是正确对齐的。
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)不能正确地证明结果是正确的,因为浮动默认为右对齐。
我还试图通过添加前导空格使每个浮点数最小,从而使其在右侧df.to_html(float_format = lambda x: '{:20f}'.format(x)上排列,从而使函数正确地对齐,但是在将x< 20有效位转换为html时省略了前导空格(或者在格式化语句中指定了很多)。
我已经发现的唯一方法是,您可以强制在具有较少有效数字的浮点数的html输出中显示前导空格,即在浮点数周围设置特殊字符,并将浮点数的有效数字格式指定为至少比实际最长值长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)))我欢迎更多优雅的方法来做这件事。
https://stackoverflow.com/questions/33400176
复制相似问题