2014-01-05 45 views
73

我想用print()和IPython display()顯示一個給定格式的熊貓數據框。例如:如何使用列的格式字符串顯示浮動數據框的大熊貓數據框?

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 

,而無需修改數據本身或創建一個副本,只是改變它的顯示方式這一點。

我該怎麼做?

+2

是'cost'唯一的浮法列,或者是不應該用'$'被格式化還有其他的浮列? – unutbu

+0

我想只爲成本列做(我的真實數據有其他專欄) –

回答

127
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 

但如果你想這隻能浮到一個美元符號進行格式化。

否則,如果你想元格式化只有一些浮動,那麼我認爲你必須預先修改數據幀(轉換那些浮弦):

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 
+2

此解決方案在Pandas 0.14中不起作用。 – holocronweaver

+0

對於我來說,這個解決方案對於0.22的熊貓來說仍然適用。 –

46

如果您不想修改數據框,則可以使用該列的自定義格式化程序。

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 
+0

是否可以讓格式化程序在多級列上工作? – user2579685

+0

AFAICT,這個例子沒有第二行'pd.options.display.float_format ='$ {:,。2f}'。format – pianoJames

9

以上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) 
5

As of Pandas 0.17 there is now a styling system使用Python format strings基本上提供了一個數據幀的格式觀點:

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 

,其顯示

enter image description here

這是一個視圖對象;數據幀本身不更改格式,但在數據幀的更新都反映在視圖:

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

enter image description here

但是它似乎有一定的侷限性:

  • 添加新行/或就地的列似乎會導致樣式視圖中的不一致(不添加行/列標籤):

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

enter image description here

看起來好,但:

C 

enter image description here

  • 格式只適用值,而不是索引條目:

    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 
    

enter image description here

相關問題