2013-08-07 5 views
9

を使用して、私はよく割合を次の形式を使用します。ライティングパーセントパンダを使用する前に、CSV形式の書き込み時パンダ

'%0.2f%%' % (x * 100) 

csvファイルを読み込むときにこれは正しくExcelで処理されます。

今、私はパンダto_excel機能を使用しようと

(simulated * 100.).to_excel(writer, 'Simulated', float_format='%0.2f%%') 

を使用して "とValueError:フロートのための無効なリテラル():0.0126パーセント" を取得しています。 '%%'がなければ、書き込みはうまくいっていますが、パーセントでフォーマットされていません。

パンダのto_excelにパーセンテージを書き込む方法はありますか?

+1

私は "バグ"と思います。 http://www.github.com/pydata/pandasで問題を開く... –

+0

参考までに、私はパンダでフォーマットすることもできません - 0.12.0 – fred

+0

ありがとうございます。私はいくつかのバージョンを待たなければならないようです。 – rhaskett

答えて

7

あなたはこれを達成するために、次の回避策を行うことができます。

df *= 100 
df = pandas.DataFrame(df, dtype=str) 
df += '%' 

ew = pandas.ExcelWriter('test.xlsx') 
df.to_excel(ew) 
ew.save() 
+1

それは動作します。ありがとう。 – rhaskett

+1

このソリューションはExcelシートのセルに文字列を生成しますか?これはむしろ欠点です...そうではありませんか? – Dror

+1

@Dror良い点...テストした結果Excelシートには文字列ではなく数値があります –

2

これは、文字列私はOpenPyXL v2.2のでパンダを使用して到着した、そして確実に細胞が最後に数字が含まれており、解決策ではありません。より多くの数のフォーマットの

xlsx = pd.ExcelWriter(output_path) 
df.to_excel(xlsx, "Sheet 1") 
sheet = xlsx.book.worksheets[0] 
for col in sheet.columns[1:sheet.max_column]: 
    for cell in col[1:sheet.max_row]: 
     cell.number_format = '0.00%' 
     cell.value /= 100 #if your data is already in percentages, has to be fractions 
xlsx.save() 

参照OpenPyXL documentation:(:効率的でない警告)細胞によってエンドセルにフォーマットを適用し、フロートのような値を保ちます。

興味深いことに、OpenPyXLは "1.23%"とフォーマットされた文字列の割合を推測するのに十分スマートであると示唆していますが、これは私には起こりません。文字列に "set_value_explicit"を使用するPandasの_Openpyxl1Writerにコードが見つかりましたが、他のバージョンのようなものはありません。もしも誰かがこの底辺に行きたいと思っているならば、さらなる調査に値するでしょう。

関連する問題