1

我做一個循環輸出和比較gof_traingof_test的Python:美化數字和字典輸出

pp.pprint(gof_train) 
pp.pprint(gof_test) 

這給我造成這樣(在IPython的筆記本):

# gof_train 
{'Chi_square': 2835.3674597856002, 
'K_S': 0.05029482196934898, 
'MSE': 7.3741561732037447e-08, 
'RMSE/Mean': 0.46193590138914759, 
'RMSE/Mode': 0.050926962892235687, 
'R_square': 0.88494738072721291} 
# gof_test 
{'Chi_square': 708.90289308802267, 
'K_S': 0.05029482196934898, 
'MSE': 7.3741561732037447e-08, 
'RMSE/Mean': 0.46193590138914759, 
'RMSE/Mode': 0.050926962892235687, 
'R_square': 0.88494738072721291} 

他們很難看。我想知道是否有任何美化輸出的方法?

具體而言,我想縮短數字,並使這兩個詞的屬性相互比較。事情是這樣的:

'Chi_square': 2835.3674, 'Chi_square': 708.902, 
'K_S': 0.050294,   'K_S': 0.0502, 
'R_square': 0.8849,  'R_square': 0.8849 

我已經想過

  1. 對於數字輸出,我想我可以嘗試%precisionhttp://ipython.org/ipython-doc/2/api/generated/IPython.core.magics.basic.html#IPython.core.magics.basic.BasicMagics.precision

  2. 但我不知道比較結果的任何好方法。如果我可以設置的gof_traingof_testfloat: left會很有趣,但我認爲這不可能。

+0

[這裏](HTTP://計算器。com/a/13945777/5276734)是字符串格式化的一個很好的解釋 – bastelflp

回答

3

只需使用pandas

In [1]: import pandas as pd 

變化的小數位數:

In [2]: pd.options.display.float_format = '{:.3f}'.format 

M AKE的數據幀:

In [3]: df = pd.DataFrame({'gof_test': gof_test, 'gof_train': gof_train}) 

並顯示:

In [4]: df 
Out [4]: 

enter image description here

另一種選擇是使用engineering prefix的:

In [5]: pd.set_eng_float_format(use_eng_prefix=True) 
      df 
Out [5]: 

enter image description here

In [6]: pd.set_eng_float_format() 
     df 
Out [6]: 

enter image description here

+0

從來沒有想過我可以使用'pandas'來做這件事,這非常整潔! – cqcn1991

+0

是的,'pandas'真的很強大。我幾乎每天都會發現一個新功能。 –

0

事實上,你不能影響Python輸出與CSS的顯示,但你可以給你的結果一個格式化函數,它會照顧使它「美麗」。在你的情況,你可以使用這樣的事情:

def compare_dicts(dict1, dict2, col_width): 
    print('{' + ' ' * (col_width-1) + '{') 
    for k1, v1 in dict1.items(): 
     col1 = u" %s: %.3f," % (k1, v1) 
     padding = u' ' * (col_width - len(col1)) 
     line = col1 + padding 
     if k1 in dict2: 
      line = u"%s %s: %.3f," % (line, k1, dict2[k1]) 
     print(line) 
    print('}' + ' ' * (col_width-1) + '}') 

dict1 = { 
    'foo': 0.43657, 
    'foobar': 1e6, 
    'bar': 0, 
} 


dict2 = { 
    'bar': 1, 
    'foo': 0.43657, 
} 

compare_dicts(dict1, dict2, 25) 

這給:

{      { 
    foobar: 1000000.000, 
    foo: 0.437,    foo: 0.437, 
    bar: 0.000,    bar: 1.000, 
}      }