2013-08-23 45 views
15

对于Python新手,我最近发现,与PY 2.7我可以这样做:PY熊猫.format(数据帧)

print '{:20,.2f}'.format(123456789) 

,这将给生成的输出:

123,456,789.00 

我现在正有类似的结果对大熊猫DF所以我的代码是这样的:

import pandas as pd 
import random 
data = [[random.random()*10000 for i in range(1,4)] for j in range (1,8)] 
df = pd.DataFrame (data) 
print '{:20,.2f}'.format(df) 

在这种情况下,我有错误:

Unknown format code 'f' for object of type 'str' 

任何关于执行如'{:20,.2f}'.format(df)之类的建议的建议?现在我的想法是索引数据框(它是一个小的),然后格式化每个单独的浮点数,可能会分配astype(str),并重建DF ...但看起来很丑陋: - (并且我甚至不确定它会工作...

你觉得怎么样?我卡住了...并且想要在这些转换为reportlabs网格时为我的数据框提供更好的格式。

回答

24
import pandas as pd 
import numpy as np 
data = np.random.random((8,3))*10000 
df = pd.DataFrame (data) 
pd.options.display.float_format = '{:20,.2f}'.format 
print(df) 

产率(随机类似于输出)

     0     1     2 
0    4,839.01    6,170.02    301.63 
1    4,411.23    8,374.36    7,336.41 
2    4,193.40    2,741.63    7,834.42 
3    3,888.27    3,441.57    9,288.64 
4    220.13    6,646.20    3,274.39 
5    3,885.71    9,942.91    2,265.95 
6    3,448.75    3,900.28    6,053.93 

文档字符串为pd.set_optionpd.describe_option解释说:

display.float_format: [default: None] [currently: None] : callable 
     The callable should accept a floating point number and return 
     a string with the desired format of the number. This is used 
     in some places like SeriesFormatter. 
     See core.format.EngFormatter for an example. 
+0

非常感谢你为这个!看起来很完美:-)的数据帧。这是一个很大的进步..现在我面临的是关于reportlab的下一个主题..哈哈..有趣..当DF转换为网格,然后我显然将失去格式.. uffff ....但我会以某种方式处理..很好的帮助!非常感谢 !! –

+3

也可以这样做:'pd.options.display.float_format ='{:20,.2f}'。format'或'pd.set_option('float_format','{:20,.2f}'。format)' :) http://pandas.pydata.org/pandas-docs/stable/basics.html#working-with-package-options –

+0

@AndyHayden:感谢您的提示! – unutbu