2017-10-05 13 views
0

私は電子メール用のHTMLテーブルを作成するためにPandas DataFramesのstyleプロパティを使用しています。 私が抱えている問題は、日時の代わりに日付として表示したいときにdatetimeのスタンプとして表示されるdatetimeインデックスがあることです。私は時間の部分に興味がありません。インタプリタでは、データフレームが正しく出力されます(日付部分のみが表示されます)。しかし、私はテーブルのスタイルプロパティを使用してスタイルを設定した後にレンダリングすると、時間部分も同様に出力するHTMLを生成します。私はstyle.format()を使用してみましたが、私はインデックスの列にアクセスすることはできません。 datetime列を通常の列にするためにインデックスをリセットしますが、私のヘッダー列はマルチインデックスです。もし私が平らにしてインデックスを使用しないと、テーブルは奇妙に見えます。パンダのDataFrame()で日時インデックスをフォーマットする。スタイル

は、残念ながら私は.styleドキュメントでこれを見つけた:

制限

DATAFRAMEのみインデックスと列 がユニークんが、大のreprてはならない、(。Series.to_frame()スタイルを使用)し、パフォーマンスはあまり良くありません。これは の要約データフレーム用です のインデックスまたは列ではなく、値をスタイルすることしかできません。スタイルを適用することはできますが、新しいHTMLを挿入することはできません。 エンティティの一部は今後扱います。

https://pandas.pydata.org/pandas-docs/stable/style.html#Limitations

私は、誰もが、私はこれを回避する方法のための任意のアイデアを持っているかどうかを確認するために掲示しています。ありがとう!テーブルを生成するための example_table_link

コード:問題を示し

例テーブル

account_day_df = merged[['Day', 'Metric1', 'Metric2', 'Metric3', 'Metric4', 'Campaign type']] 
account_day_df = account_day_df.groupby(['Day', 'Campaign type']).sum() 
account_day_df.loc[:, 'Metric5'] = account_day_df['Metric1']/account_day_df['Metric4'] 
account_day_df = account_day_df.unstack('Campaign type') 

html += (
    account_day_df.style 
     .background_gradient(cmap=cm, subset=['Metric5']) 
     .set_table_attributes('border="1" class="dataframe table table-hover table-bordered"') 
     .render(i) 
) 

答えて

2

あなたはdf.index = df.index.strftime("%Y-%d-%m")を行うことでstrftime()を使用してobject代わりのdatetimeに索引を変換することができます。ここでは例です:

data = np.random.randn(10, 5) 
index = pd.date_range('20130101', periods=10, freq='D') 
pd.DataFrame(data, index=index).style.format("{:.2}") 

enter image description here

pd.DataFrame(data, index=index.strftime("%Y-%m-%d")).style.format("{:.2}") 

enter image description here

+0

しかし、提供された例のように、私のマルチインデックスを維持しながら、あなたがそれをどのように行うのですか? –

+0

あなたの例では、列にマルチインデックスがあります。索引を変更しても列は混乱しません。 –

関連する問題