[英]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()
)
設置:
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.