2017-10-05 82 views
0

我使用Pandas DataFrames的style屬性來創建用於發送電子郵件的HTML表格。 我遇到的問題是,我有一個日期時間索引,它顯示爲日期時間戳,而我希望它顯示爲日期。我對時間部分不感興趣。在解釋器中,數據框打印正確(僅顯示日期部分)。但是,當使用表格的style屬性進行風格化後,它會生成HTML,同時也會放出時間部分。我研究過使用style.format(),但我無法訪問索引列。 我會重置索引,以使日期時間列成爲普通列......但我的標題列是多指標。如果我展平並且不使用索引,表格看起來很奇怪。使用熊貓的DataFrame()格式化日期時間索引風格

不幸的是,我發現這個.style文檔中:

限制

數據框只(使用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

您可以使用指數由strftime()df.index = df.index.strftime("%Y-%d-%m")轉換爲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

在你的例子中,你有多列索引。更改索引不會混淆列。 –