首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫数据to_html细胞比对

熊猫数据to_html细胞比对
EN

Stack Overflow用户
提问于 2015-10-28 19:41:28
回答 1查看 3K关注 0票数 1

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

代码语言:javascript
复制
    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()中有一个格式化程序选项,似乎可以用括号显示负数,但我不知道如何根据这种条件设置对齐和字体颜色。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-08-12 16:53:35

我一直在研究同样的正当理由问题。这似乎是一个众所周知的问题(见上面@TomAugspurger的评论)。我使用您的解决方案显示带括号的负数,并能够得到正确的理由。不过,这是个陷阱。你需要有正数的前导和尾随的特殊字符来完成这个工作。

首先,计算出最长浮点数中有多少个有效数字是正确对齐的。

代码语言:javascript
复制
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。

代码语言:javascript
复制
#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
  • 熊猫0.18.1
  • Numpy 1.11.1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33400176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档