如何使用列的格式string显示大pandasDataFrame的浮动?

我想用print()和IPython display()来显示给定格式的pandas数据框。 例如:

 df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890], index=['foo','bar','baz','quux'], columns=['cost']) print df cost foo 123.4567 bar 234.5678 baz 345.6789 quux 456.7890 

我想以某种方式强制打印

  cost foo $123.46 bar $234.57 baz $345.68 quux $456.79 

而无需修改数据本身或创build副本,只需更改显示方式即可。

我该怎么做?

 import pandas as pd pd.options.display.float_format = '${:,.2f}'.format df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890], index=['foo','bar','baz','quux'], columns=['cost']) print(df) 

产量

  cost foo $123.46 bar $234.57 baz $345.68 quux $456.79 

但是这只适用于如果你想每个浮动与美元符号格式化。

否则,如果你只想为某些浮点数进行美元格式化,那么我认为你必须预先修改数据框(将这些浮点数转换为string):

 import pandas as pd df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890], index=['foo','bar','baz','quux'], columns=['cost']) df['foo'] = df['cost'] df['cost'] = df['cost'].map('${:,.2f}'.format) print(df) 

产量

  cost foo foo $123.46 123.4567 bar $234.57 234.5678 baz $345.68 345.6789 quux $456.79 456.7890 

如果您不想修改数据框,则可以使用该列的自定义格式化程序。

 import pandas as pd pd.options.display.float_format = '${:,.2f}'.format df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890], index=['foo','bar','baz','quux'], columns=['cost']) print df.to_string(formatters={'cost':'${:,.2f}'.format}) 

产量

  cost foo $123.46 bar $234.57 baz $345.68 quux $456.79 

类似于上面的unutbu,你也可以使用applymap如下:

 import pandas as pd df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890], index=['foo','bar','baz','quux'], columns=['cost']) df = df.applymap("${0:.2f}".format) 

从Pandas 0.17起,现在有一个样式系统 ,它使用Python格式string提供DataFrame的格式化视图:

 import pandas as pd import numpy as np constants = pd.DataFrame([('pi',np.pi),('e',np.e)], columns=['name','value']) C = constants.style.format({'name': '~~ {} ~~', 'value':'--> {:15.10f} <--'}) C 

显示

在这里输入图像描述

这是一个视图对象; DataFrame本身不会更改格式,但DataFrame中的更新会反映在视图中:

 constants.name = ['pie','eek'] C 

在这里输入图像描述

但是它似乎有一些限制:

  • 在原地添加新行和/或列似乎会导致样式化视图中的不一致(不添加行/列标签):

     constants.loc[2] = dict(name='bogus', value=123.456) constants['comment'] = ['fee','fie','fo'] constants 

在这里输入图像描述

看起来不错,但是:

 C 

在这里输入图像描述

  • 格式只适用于值,不适用于索引条目:

     constants = pd.DataFrame([('pi',np.pi),('e',np.e)], columns=['name','value']) constants.set_index('name',inplace=True) C = constants.style.format({'name': '~~ {} ~~', 'value':'--> {:15.10f} <--'}) C 

在这里输入图像描述