Python pandas
packageメソッド pandas.DataFrame.to_csv ?によって印刷される各列に特に浮動小数点精度を指定することは可能ですか?
次のように配置されたpandas
データフレームがある場合:
In [53]: df_data[:5]
Out[53]:
year month day lats lons vals
0 2012 6 16 81.862745 -29.834254 0.0
1 2012 6 16 81.862745 -29.502762 0.1
2 2012 6 16 81.862745 -29.171271 0.0
3 2012 6 16 81.862745 -28.839779 0.2
4 2012 6 16 81.862745 -28.508287 0.0
そこには float_format
オプションを使用して精度を指定できますが、印刷時にデータフレームのすべての列にその精度が適用されます。
私はそれを次のように使用するとき:
df_data.to_csv(outfile, index=False,
header=False, float_format='%11.6f')
vals
に不正確な精度が指定されている場合、次のようになります。
2012,6,16, 81.862745, -29.834254, 0.000000
2012,6,16, 81.862745, -29.502762, 0.100000
2012,6,16, 81.862745, -29.171270, 0.000000
2012,6,16, 81.862745, -28.839779, 0.200000
2012,6,16, 81.862745, -28.508287, 0.000000
これは to_string
。 formatters
引数があり、列名の辞書をフォーマッタに提供できます。次に、いくつかの正規表現を使用して、デフォルトの列区切り文字を選択した区切り文字に置き換えることができます。
データフレームをCSVファイルにエクスポートする前に、列「vals」のタイプを変更します
df_data['vals'] = df_data['vals'].map(lambda x: '%2.1f' % x)
df_data.to_csv(outfile, index=False, header=False, float_format='%11.6f')
Hknustの最初の行の最新バージョンは次のとおりです。
df_data['vals'] = df_data['vals'].map(lambda x: '{0:.1}'.format(x))
科学表記なしで印刷するには:
df_data['vals'] = df_data['vals'].map(lambda x: '{0:.1f}'.format(x))
データフレームをファイルに保存する前に、データフレームに round メソッドを使用できます。
df_data = df_data.round(6)
df_data.to_csv('myfile.dat')
to_string
@mattexxによって提案されたアプローチは、データフレームを変更しないので、私にはより良く見えます。
jupyter
ノートブックを使用して、きれいなHTML出力を取得する場合は、to_html
方法。ここで、新しいデフォルトの精度4を設定し、それをオーバーライドして、特定の列wider
の5桁を取得します。
from IPython.display import HTML
from IPython.display import display
pd.set_option('precision', 4)
display(HTML(df.to_html(formatters={'wider': '{:,.5f}'.format})))