簡體   English   中英

使用 Pandas DataFrame Styler 格式化日期時間索引,僅顯示時間部分

[英]Formatting Datetime Index with Pandas DataFrame Styler, to only show time-part

我正在使用 Pandas DataFrames 的樣式屬性來創建 HTML 表以發送電子郵件。

我遇到的問題是我有一個日期時間索引,當我希望它顯示為日期時,它顯示為日期時間戳。 我對時間部分不感興趣 在解釋器中,DataFrame 確實打印正確(僅顯示日期部分)。 但是,當我在使用表格的樣式屬性進行樣式化后進行渲染時,它會生成 HTML ,它也會顯示時間部分。 我已經研究過使用style.format()但我無法訪問索引列。 我會重置索引以使日期時間列成為普通列......但我的 header 列是 MultIndex。 如果我變平並且不使用索引,那么表格看起來很奇怪。

不幸的是,我在 .style 文檔中找到了這個:

限制

  • 僅限 DataFrame(使用Series.to_frame().style
  • 索引和列必須是唯一的
  • 沒有大的repr,表現也不是很好; 這是用於摘要 DataFrames
  • 您只能設置值的樣式,而不是索引或列
  • 您只能應用 styles,不能插入新的 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)
)

作為format_index 1.4.0 中Styler 增強功能的一部分,format_index 現在可用於直接設置索引樣式:

例如:

df.style.format_index(lambda s: s.strftime("%Y-%m-%d"))

風格索引

當然,這可以與其他 styles 鏈接:

(
    df.style.format_index(lambda s: s.strftime("%Y-%m-%d"))
        .format(precision=2)
        .background_gradient()
)

具有多種樣式的樣式化 DataFrame。格式化索引、精度和背景梯度


設置:

import pandas as pd
from numpy.random import Generator, MT19937

rng = Generator(MT19937(10))
df = pd.DataFrame(
    rng.random(size=(10, 2)),
    index=pd.date_range('2022-01-01', periods=10, freq='D')
)

df.style

沒有格式的樣式器對象

您可以通過執行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}")

在此處輸入圖片說明

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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM