web-dev-qa-db-ja.com

Py Pandas .format(dataframe)

Python初心者として、私は最近、Py2.7で次のようなことができることを発見しました。

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

結果の出力が得られます。

_123,456,789.00
_

pandas 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グリッドに変換されるときに、データフレームのより良いフォーマットが欲しいです。

17
Fabio Pomi
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_optionまたはpd.describe_optionのdocstringは次のように説明しています。

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.
25
unutbu